Redis:为带有@Cacheable注释的方法设置不同的生存时间



我有一组缓存的方法,看起来像这样:

@Cacheable(value = "myCacheName", keyGenerator = "myKeyGenerator")
public Product getProduct(ProductRequest request) {
    // ...
}

我需要为这些方法返回的对象设置不同的生存时间(过期间隔(。

问题:根据文档,提供的方法是在方法的返回类型上使用@RedisHash(timeToLive=…​)@TimeToLive注释。但是,我不想用缓存相关的逻辑污染我的域类。此外,我的一些方法返回我无法修改的类的字符串或对象。我更愿意以更可配置的方式实现它。还有一个名为 spring.cache.redis.time-to-live 的配置属性,但它在所有地方都应用相同的生存时间。

问:有没有办法在方法级别指定生存时间/过期间隔?或者一般来说,如何以更优雅的方式实现它?

嗨,

如果您只想使用 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;
}

这里也是更广泛的缓存配置的一个片段,它再次产生一个缓存管理器。这次它配置多个区域:

@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();
}

我举了最后一个例子:将 Spring 缓存与 Redis 结合使用时在特定时间设置过期密钥

仅使用@Cacheable(value = "myCacheName", keyGenerator = "timeoutCacheManager")

最新更新