缓存的两种形式:(一些不常更新的数据)
①页面缓存经常用在CMS(content manage system)内存管理系统里边(Smarty缓存),如新闻类信息
②数据缓存经常会用在页面的具体数据里边
在某一个瞬间或者是某一个短暂的时刻有成千上万的请求到达服务器,如果单纯的使用数据库来进行处理,就算不崩,也会很慢的,轻则造成用户体验极差用户量流失,重则数据库瘫痪,服务宕机,为应对高并发需求的场合,可以考虑使用redis
一定要开启resis!!!!否则项目根本就连接不上redis!!!!
确保自己的redis安装成功并且能正常使用
然后就可以开始在Java中使用了
想要在 Java 中使用 Redis 缓存,需要添加相关的Jar包依赖,打开Maven仓库的网站:https://mvnrepository.com/ ,搜索Jedis:
<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
</dependency>
@Test
public void redisTester() {
Jedis jedis = new Jedis("127.0.0.1");
System.out.println("connection success");
System.out.println("client is runing:"+jedis.ping());
}
@Test
public void redisTester() {
int i = 0;
try {
long start = System.currentTimeMillis();// 开始毫秒数
while (true) {
long end = System.currentTimeMillis();
if (end - start >= 1000) {// 当大于等于1000毫秒(相当于1秒)时,结束操作
break;
}
i++;
jedis.set("test" + i, i + "");
}
} finally {// 关闭连接
jedis.close();
}
// 打印1秒内对Redis的操作次数
System.out.println("redis每秒操作:" + i + "次");
}
}
跟数据库连接池相同,Java Redis也同样提供了类redis.clients.jedis.JedisPool来管理Reids连接池对象,redis.clients.jedis.JedisPoolConfig对连接池进行配置
JedisPoolConfig poolConfig = new JedisPoolConfig();
// 最大空闲数
poolConfig.setMaxIdle(50);
// 最大连接数
poolConfig.setMaxTotal(100);
// 最大等待毫秒数
poolConfig.setMaxWaitMillis(20000);
// 使用配置创建连接池
JedisPool pool = new JedisPool(poolConfig, "localhost");
// 从连接池中获取单个连接
Jedis jedis = pool.getResource();
// 如果需要密码
//jedis.auth("password");
redis只有特定的数据类型,无法操作对象,spring针对这一问题提供了redisTemplate
org.springframework.data
spring-data-redis
2.2.3.RELEASE
用 Spring 配置一个 JedisPoolConfig 对象
Spring Data Redis中有四种可供我们选择的工厂模型
- JredisConnectionFactory
- JedisConnectionFactory
- LettuceConnectionFactory
- SrpConnectionFactory
普通的连接没有办法直接将对象直接存入 Redis 内存中,需要将对象序列化(可以简单的理解为继承Serializable接口)。我们可以把对象序列化之后存入Redis缓存中,然后在取出的时候又通过转换器,将序列化之后的对象反序列化回对象
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y6LLlP8w-1579483279541)(file:///C:\Users\ADMINI~1\AppData\Local\Temp\msohtmlclip1\01\clip_image008.jpg)]
RedisTemplate会找到对应的序列化器去转换Redis的键值:
pojo类实现了serializable接口
@Test
public void test() {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext-redis.xml//上一步编写好的配置文件的名字");
RedisTemplate redisTemplate = context.getBean(RedisTemplate.class);
User user = new User();
user.setName("bigbotle");
redisTemplate.opsForValue().set("isMe", user);
User isMe = (User) redisTemplate.opsForValue().get("isMe");
isMe.test();
}
}
@Data
class User implements Serializable{
private String name;
public void test(){
System.out.println("userName:"+name);
}
org.springframework.boot
spring-boot-starter-data-redis
2.2.2.RELEASE
在SpringBoot中使用.properties或者.yml都可以
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
# 连接池中的最大空闲连接
spring.redis.pool.max-idle=8
# 连接池中的最小空闲连接
spring.redis.pool.min-idle=0
# 连接超时时间(毫秒)
spring.redis.timeout=0