我有一组看起来像这样的缓存方法:
@Cacheable(value = "myCacheName", keyGenerator = "myKeyGenerator")
public Product getProduct(ProductRequest request) {
// ...
}
并且我需要为这些方法返回的对象设置不同的生存时间(失效间隔)。
问题::根据the documentation,提供的方法是在方法的返回类型上使用@RedisHash(timeToLive=…)
或@TimeToLive
批注。但是,我不想使用与缓存相关的逻辑来污染我的域类。另外,我的某些方法返回的字符串或无法修改的类的对象。我希望以更可配置的方式实现它。还有一个名为spring.cache.redis.time-to-live
的配置属性,但是它在所有地方都应用相同的生存时间。
问题:是否可以在方法级别指定生存/失效间隔时间?还是一般来说,如何以更优雅的方式实现它?
答案 0 :(得分:6)
您好,如果您只想使用Spring注释,请执行以下操作。
@CacheConfig
批注允许您定义特定的CacheManager以进一步使用@Cacheable
批注还允许定义cacheManager
@CacheConfig(cacheNames="myCacheName",cacheManager="timeoutCacheManager")
class ProductReader {
@Cacheable(value = "myCacheName", keyGenerator = "myKeyGenerator")
public Product getProduct(ProductRequest request) {
// ...
}
}
@Bean
public CacheManager timeoutCacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(mytimeToLive);
return cacheManager;
}
这也是更广泛的缓存配置的一部分,再次导致CacheManager。这次它将配置多个区域:
@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();
}
我举了最后一个例子: set expire key at specific time when using Spring caching with Redis
仅使用@Cacheable(value = "myCacheName", keyGenerator = "timeoutCacheManager")