前言
因为业务需要使用Spring Cache作为缓存。而我在百度找到的结果都是2.0之前的,Spring Data Redis的CacheManager的实现RedisCacheManager发生了很大变动,配置无法向下兼容,以下是2.0之前的配置。
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
return cacheManager;
}
查看文档Spring Data Redis 2.1.0 Document,发现以下变动
1、引入spring-redis的依赖
首先使用maven引入spring-redis相关的依赖,2.0中使用spring-boot-starter-data-redis代替了原来的spring-boot-starter-redis
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2、配置redis数据库
在SpringBoot的application.yml配置文件中配置redis数据库的相关信息,这里改动主要有两点,其一是时间相关的属性,如spring.redis.timeout,在1.0中,时间相关的配置参数类型为int,默认单位为毫秒,配置中只需指定具体的数字即可,而在2.0中,时间相关的配置的参数类型都改为了jdk1.8的Duration,因此在配置文件中配置redis的连接超时时间timeout时,需要加入时间单位,如60s;其二是,在2.0中配置redis的连接池信息时,不再使用spring.redis.pool的属性,而是直接使用redis的lettuce或jedis客户端来配置,具体配置信息如下:
spring:
redis:
database: 0 # Redis数据库索引(默认为0)
host: localhost # Redis服务器地址
port: 6379 # Redis服务器连接端口
password: # Redis服务器连接密码(默认为空)
timeout: 6000ms # 连接超时时长(毫秒)
# Spring Boot 1.0 默认使用的是 Jedis 客户端,2.0 替换成 Lettuce
# jedis:
# pool:
# max-active: 10000 # 连接池最大连接数(使用负值表示没有限制)
# max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
# max-idle: 10 # 连接池中的最大空闲连接
# min-idle: 5 # 连接池中的最小空闲连接
lettuce:
pool:
max-active: 8 # 连接池最大连接数(使用负值表示没有限制) 默认 8
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-idle: 8 # 连接池中的最大空闲连接 默认 8
min-idle: 0 # 连接池中的最小空闲连接 默认 0
3、配置CacheManager
通过配置Spring的CacheManager为redis,即可指定使用redis做缓存,具体的配置方式跟1.0也有所不同,在1.0中使用RedisTemplate即可实例化一个RedisCacheManager,但是在2.0中删除了这个构造器,同时也不可以通过之前的setDefaultExpiration方法设置默认的缓存过期时间等,在新版本中可以通过以下的两种方式构造一个RedisCacheManager:
1.通过RedisCacheManager的静态方法create(方式一):
@Bean
public CacheManager cacheManager(RedisConnectionFactory factory) {
RedisCacheManager cacheManager = RedisCacheManager.create(factory);
return cacheManager;
}
这样产生的cacheManager只是使用Spring提供的默认配置。
2.通过Spring提供的RedisCacheConfiguration类,构造一个自己的redis配置类,再利用RedisCacheManager中的builder.build()的方式生成cacheManager(方式二):
@Bean
public CacheManager cacheManager(@Qualifier(value = "jedisConnectionFactory") RedisConnectionFactory factory) {
return RedisCacheManager.builder(factory)// 使用自定义的缓存配置初始化一个cacheManager
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(5))//缓存五分钟
.disableCachingNullValues()// 不缓存空值
)
.transactionAware()
.build();
}
修改后发现已经起作用了
再看一下默认的配置,包含了默认的缓存时间及序列化的相关配置:
到这里从1.0更新到2.0时,redis缓存的相关配置就差不多了,其他的可以看上面给出的官方文档。
转载:https://blog.csdn.net/qq_36850813/article/details/101097185