我正在升级使用Spring Data Redis到2.x的项目。以前,可以使用RedisCacheManager.setDefaultExpiration(defaultExpireTime)将缓存管理器配置为默认过期。 2.x中似乎不存在此选项。 2.x中的等价物是什么?是RedisCacheConfiguration.entryTtl(ttl)还是其他什么?
我可能遗漏了一些东西,但我找不到Spring Data Redis 2.x的迁移指南。这样的迁移指南是否存在?
简而言之,我想将以下代码迁移到Redis 2.x:
public CacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
redisCacheManager.setDefaultExpiration(DEFAULT_EXPIRATION_SECONDS);
return redisCacheManager;
}
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory());
return template;
}
以下是等效的吗?如果没有,Redis 2.x中的等效代码是什么?
public CacheManager cacheManager() {
return RedisCacheManager.builder(redisConnectionFactory())
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(DEFAULT_EXPIRATION_DURATION))
.build();
}
答案 0 :(得分:5)
最初,我正在运行以下源代码和依赖项......
@Bean(value ="redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisTemplate redisTemplate){
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(resourceConfigValue.getCacheExpireSeconds());
return cacheManager;
}
org.springframework.boot:弹簧引导起动的web:1.5.10.RELEASE
org.springframework.boot:弹簧引导起动数据的Redis:1.5.10.RELEASE
我已经确认这个想法按预期工作......
@Bean(value ="redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
Duration expiration = Duration.ofSeconds(resourceConfigValue.getCacheExpireSeconds());
return RedisCacheManager.builder(redisConnectionFactory)
.cacheDefaults(RedisCacheConfiguration.defaultCacheConfig().entryTtl(expiration)).build();
}
org.springframework.boot:spring-boot-starter-web:2.0.2.RELEASE
org.springframework.boot:弹簧引导起动数据的Redis:2.0.2.RELEASE
答案 1 :(得分:0)
将其放入application.yml
spring.cache.redis。生存时间:60秒
将60更改为您的DEFAULT_EXPIRATION_SECONDS
答案 2 :(得分:0)
使用新的 redis 版本,您不能再传递 RedisTemplate。
这是您如何设置 RedisCacheManager 过期时间(例如:1 小时过期时间)
@Bean
public RedisCacheManager redisCacheManager(LettuceConnectionFactory lettuceConnectionFactory) {
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(Duration.ofHours(1));
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(lettuceConnectionFactory)
.cacheDefaults(redisCacheConfiguration).build();
}
如果没有设置 entryTtl,则没有过期。
使用 spring redis 2.4.1 测试
PS:你也可以定义两个RedisCacheManager bean,一个带有@Primary 注解。这样你就可以像这样在@Cacheable / @CachePut 注释中传递 timeoutCacheManager 。
@Cacheable(value = "your.cache.name", cacheManager = "timeoutCacheManager")