Map<String, RedisCacheConfiguration> redisCacheConfigMap
= new HashMap<>();
이러한 맵을 우리는 redisCacheManager에서 만들어줄 것이다.
이때 여기 value로 들어가는 RedisCacheConfiguration는 Spring이 Redis 캐시를 사용할 때
각 캐시마다 어떤 방식으로 저장하고, 직렬화하고, TTL을 설정할지 정의해놓은 설정 객체이다.
| 메소드 | 역할 | 자주 쓰는 이유 |
|---|---|---|
entryTtl(Duration ttl) | 캐시 유효 시간(TTL) 설정 | 캐시 만료 설정은 거의 필수 |
disableCachingNullValues() | null 값을 캐시하지 않도록 설정 | 의미 없는 데이터 낭비 방지 |
serializeValuesWith(...) | Value 직렬화 방식 지정 | JSON, JDK 등 직렬화 전략 지정 |
serializeKeysWith(...) | Key 직렬화 방식 지정 | Key를 사람이 읽을 수 있게 설정 |
prefixCacheNameWith(String prefix) | Key prefix 지정 | Redis에서 키 구분 및 관리 용이 |
disableKeyPrefix() | prefix 사용 안 함 | prefix 없이 raw 키를 그대로 저장하고 싶을 때 |
enableTimeToIdle() | 사용 안 하면 TTL만큼 유지, 사용하면 마지막 접근 기준 TTL 리셋 | LRU 캐시처럼 동작 가능 (예외적 상황) |
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
.entryTtl(Duration.ofMinutes(10)) // TTL 설정
.disableCachingNullValues() // null 저장 방지
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer())) // Value 직렬화
.serializeKeysWith(RedisSerializationContext.SerializationPair
.fromSerializer(new StringRedisSerializer())) // Key 직렬화
.prefixCacheNameWith("myApp::"); // 키 앞에 접두사 붙이기
public class CacheConfig {
@Bean
public RedisCacheManager redisCacheManager(RedisConnectionFactory connectionFactory) {
RedisCacheConfiguration defaultConfig = RedisCacheConfiguration
.defaultCacheConfig()
.disableCachingNullValues()
.serializeValuesWith(RedisSerializationContext.SerializationPair
.fromSerializer(new GenericJackson2JsonRedisSerializer()));
//저장할 캐시의 이름?구조
Map<String, RedisCacheConfiguration> redisCacheConfigMap
= new HashMap<>();
//캐시의 이름과 시간을 정해줌, 추가적인 직렬화 방식을 선택하고 싶으면 jdk를 context로 설정할 것
redisCacheConfigMap.put("PopularProduct", defaultConfig.entryTtl(Duration.ofHours(1)));
return RedisCacheManager.builder(connectionFactory)
.withInitialCacheConfigurations(redisCacheConfigMap)
.build();
}
}