how to configure different ttl for each redis cache when using @cacheable in springboot2.0

后端 未结 3 441

I am using @cacheable in springboot2.0 with redis. I have configured RedisCacheManager as follow:

@Bean
public RedisCacheManager redisCacheManager(RedisConne         


        
相关标签:
3条回答
  • 2021-01-06 06:12

    Here is how you can define multiple Redis based caches with different TTL and maxIdleTime using Redisson Java client:

        @Bean(destroyMethod="shutdown")
        RedissonClient redisson() throws IOException {
            Config config = new Config();
            config.useClusterServers()
                  .addNodeAddress("redis://127.0.0.1:7004", "redis://127.0.0.1:7001");
            return Redisson.create(config);
        }
    
        @Bean
        CacheManager cacheManager(RedissonClient redissonClient) {
            Map<String, CacheConfig> config = new HashMap<String, CacheConfig>();
    
            // create "myCache1" cache with ttl = 20 minutes and maxIdleTime = 12 minutes
            config.put("myCache", new CacheConfig(24*60*1000, 12*60*1000));
    
            // create "myCache2" cache with ttl = 35 minutes and maxIdleTime = 24 minutes
            config.put("myCache2", new CacheConfig(35*60*1000, 24*60*1000));
            return new RedissonSpringCacheManager(redissonClient, config);
        }
    
    0 讨论(0)
  • 2021-01-06 06:18

    You can configure different expire time for each cache using only one CacheManager by creating different configurations for each cache and put them in a map with which you create the CacheManager.

    For example:

    @Bean
    RedisCacheWriter redisCacheWriter() {
        return RedisCacheWriter.lockingRedisCacheWriter(jedisConnectionFactory());
    }
    
    @Bean
    RedisCacheConfiguration defaultRedisCacheConfiguration() {
        return RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(defaultCacheExpiration));
    }
    
    @Bean
    CacheManager cacheManager() {
        Map<String, RedisCacheConfiguration> cacheNamesConfigurationMap = new HashMap<>();
        cacheNamesConfigurationMap.put("cacheName1", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(ttl1)));
        cacheNamesConfigurationMap.put("cacheName2", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(ttl2)));
        cacheNamesConfigurationMap.put("cacheName3", RedisCacheConfiguration.defaultCacheConfig().entryTtl(Duration.ofSeconds(ttl3)));
    
        return new RedisCacheManager(redisCacheWriter(), defaultRedisCacheConfiguration(), cacheNamesConfigurationMap);
    }
    
    0 讨论(0)
  • 2021-01-06 06:27

    If you need configure different expire time for cache when using @cacheable , you can configure different CacheManager with different ttl,and specify cacheManager when using cache in your service.

     @Cacheable(cacheManager = "expireOneHour", value = "onehour", key = "'_onehour_'+#key", sync = true)
    
    0 讨论(0)
提交回复
热议问题