我正在春季缓存抽象注释,以将缓存应用于我的服务方法。
由于我将Redis用作缓存存储,因此我想使用在特定时间使缓存过期的选项,因为Redis支持该选项。 redis中的expireat命令可用于设置将来的到期时间。
我不确定使用RedisCache时如何对属于缓存的键进行操作。
我试图通过创建一个bean来自定义RedisCacheManager。
我看到公开了一个getNativeCache()方法。但是我找不到任何使用它设置expireat值的方法。
如果有一种自定义RedisCacheManager的方法,以便特定缓存的所有键在到期时使用同一时间,请告诉我。
答案 0 :(得分:1)
@Bean (name="cacheManager")
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration conf_ready_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(50000));
RedisCacheConfiguration conf_base_info = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMillis(60000));
Map<String, RedisCacheConfiguration> cacheConfigurations = new HashMap<String, RedisCacheConfiguration>();
cacheConfigurations.put("base_info", conf_base_info);
cacheConfigurations.put("ready_info", conf_ready_info);
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(connectionFactory)
.withInitialCacheConfigurations(cacheConfigurations).build();
}
@Cacheable(value = "ready_info", key = "#aid")
public String findByAid(String aid) throws Exception {
String readyInfo = "";
return readyInfo;
}
答案 1 :(得分:0)
实际上是。请检查以下内容:
RedisCacheConfiguration configuration = RedisCacheConfiguration.defaultCacheConfig()
.disableCachingNullValues()
.entryTtl(<your duration>)
.computePrefixWith(CacheKeyPrefix.simple())
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()));
RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory)
.cacheDefaults(configuration)
.build();
我正在使用2.0.4.RELEASE版本的spring boot。如果您使用的是旧版本,请按以下步骤操作:
RedisCacheManager cacheManager =
new RedisCacheManager(
redisTemplate,//redis template
Arrays.asList("my-cahce"),//loads these caches at startup
false);//Do not allow null values
cacheManager.setLoadRemoteCachesOnStartup(true);
cacheManager.setCachePrefix(new DefaultRedisCachePrefix());
cacheManager.setDefaultExpiration(TimeUnit.SECONDS.convert(365, TimeUnit.DAYS));