RedisCacheConfiguration을 RedisCacheManager에 연결해서 설정하면,

@Cacheable과 같은 Spring Cache 애노테이션만으로도 자동으로 Redis 캐시가 적용됩니다.

적용 흐름 요약

  1. @EnableCaching으로 캐시 기능 활성화
  2. RedisCacheManager를 Bean으로 등록 (RedisCacheConfiguration과 연결)
  3. @Cacheable, @CachePut, @CacheEvict 등 애노테이션 사용 → 자동으로 Redis 사용

<aside> ❗

주의할 점


  1. @Cacheable 자체는 Spring Cache 추상화이고, 실제 구현은 CacheManager에 따라 달라짐
  2. RedisCacheManager가 설정되어 있으면 Redis로 동작
  3. RedisCacheConfiguration은 전체 캐시에 적용되는 기본 설정 (필요 시 캐시 이름별로 설정을 다르게 할 수도 있음) </aside>

Redis 캐시 설정 클래스 생성

package kr.hhplus.be.server.common.cache

import com.fasterxml.jackson.annotation.JsonTypeInfo
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.kotlin.KotlinModule
import org.springframework.beans.factory.annotation.Value
import org.springframework.cache.CacheManager
import org.springframework.cache.annotation.EnableCaching
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.data.redis.cache.RedisCacheConfiguration
import org.springframework.data.redis.cache.RedisCacheManager
import org.springframework.data.redis.connection.RedisConnectionFactory
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer
import org.springframework.data.redis.serializer.RedisSerializationContext
import org.springframework.data.redis.serializer.StringRedisSerializer
import java.time.Duration

@Configuration
@EnableCaching
class CacheConfig(
    @Value("\\${spring.data.redis.host}") private val host: String,
    @Value("\\${spring.data.redis.port}") private val port: Int
) {

    @Bean
    fun cacheManager(cf: RedisConnectionFactory?): CacheManager {
        ...
    }

    @Bean
    fun redisConnectionFactory(): RedisConnectionFactory {
        ...
    }

    @Bean
    fun redisCacheConfiguration(): RedisCacheConfiguration {
        ...
    }
    
    @Bean
    fun redisObjectMapper(): ObjectMapper {
				...
    }

}

CacheManager

@Bean
fun cacheManager(cf: RedisConnectionFactory?): CacheManager {
    return RedisCacheManager.RedisCacheManagerBuilder
        .fromConnectionFactory(cf!!)
        .cacheDefaults(redisCacheConfiguration())
        .build()
}
  1. cacheManager()
  2. RedisCacheManager