RedisCacheConfiguration을 RedisCacheManager에 연결해서 설정하면,
@Cacheable과 같은 Spring Cache 애노테이션만으로도 자동으로 Redis 캐시가 적용됩니다.
<aside> ❗
주의할 점
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 {
...
}
}
@Bean
fun cacheManager(cf: RedisConnectionFactory?): CacheManager {
return RedisCacheManager.RedisCacheManagerBuilder
.fromConnectionFactory(cf!!)
.cacheDefaults(redisCacheConfiguration())
.build()
}
@Cacheable, @CacheEvict, @CachePut 같은 어노테이션이 붙은 메서드를 호출할 때 그 캐시 데이터를 Redis에 저장하거나 읽는 역할을 하는 매니저입니다.
아래의 메서드가 실행되면 내부적으로 다음이 일어납니다:
@Cacheable(cacheNames = ["user"], key = "#id")
fun getUser(id: Long): User { ... }