복붙노트

[REDIS] springboot2.0에서 @cacheable 사용하는 경우 어떻게 각 레디 스 캐시에 대해 다른 TTL을 구성 할 수

REDIS

springboot2.0에서 @cacheable 사용하는 경우 어떻게 각 레디 스 캐시에 대해 다른 TTL을 구성 할 수

나는 레디 스에 springboot2.0에 @cacheable을 사용하고 있습니다. 나는 다음과 같이 RedisCacheManager를 구성한 :

@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) {

    RedisCacheWriter redisCacheWriter = RedisCacheWriter.lockingRedisCacheWriter(connectionFactory);
    SerializationPair<Object> valueSerializationPair = RedisSerializationContext.SerializationPair
            .fromSerializer(new GenericJackson2JsonRedisSerializer());
    RedisCacheConfiguration cacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
    cacheConfiguration = cacheConfiguration.serializeValuesWith(valueSerializationPair);
    cacheConfiguration = cacheConfiguration.prefixKeysWith("myPrefix");
    cacheConfiguration = cacheConfiguration.entryTtl(Duration.ofSeconds(30));

    RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, cacheConfiguration);
    return redisCacheManager;
}

하지만이 모든 키의 TTL 30초, 어떻게 다른 cachename 각 레디 스 캐시에 대해 다른 TTL을 구성 할 수 있도록?

해결법

  1. ==============================

    1.각 캐시에 대해 서로 다른 구성을 생성하여 하나의 CacheManager를 사용하여 서로 다른 각각의 캐시 시간이 만료 구성하고 CacheManager를 만들 수있는지도에 넣을 수 있습니다.

    각 캐시에 대해 서로 다른 구성을 생성하여 하나의 CacheManager를 사용하여 서로 다른 각각의 캐시 시간이 만료 구성하고 CacheManager를 만들 수있는지도에 넣을 수 있습니다.

    예를 들면 :

    @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);
    }
    
  2. ==============================

    2.서로 다른 구성이 필요한 경우 @cacheable를 사용하는 경우 캐시 시간이 만료, 당신은 다른 TTL과 다른 CacheManager를 구성하고, 서비스의 캐시를 사용하는 경우 cacheManager를 지정할 수 있습니다.

    서로 다른 구성이 필요한 경우 @cacheable를 사용하는 경우 캐시 시간이 만료, 당신은 다른 TTL과 다른 CacheManager를 구성하고, 서비스의 캐시를 사용하는 경우 cacheManager를 지정할 수 있습니다.

     @Cacheable(cacheManager = "expireOneHour", value = "onehour", key = "'_onehour_'+#key", sync = true)
    
  3. from https://stackoverflow.com/questions/51054774/how-to-configure-different-ttl-for-each-redis-cache-when-using-cacheable-in-spr by cc-by-sa and MIT license