inblog logo
|
LifeLog, DevLog
    Redis

    RedisCacheManager, RedisTemplate 설정

    KYJTHEYJ's avatar
    KYJTHEYJ
    Apr 02, 2026
    RedisCacheManager, RedisTemplate 설정
    Contents
    RedisCacheManager작동 흐름RedisTemplateRedisTemplate 명령어TTL 만료시간 설정 예시Spring Boot 에서의 활용

    RedisCacheManager

    Spring Cache 어노테이션이 실제 동작 할 때
    Redis를 사용하도록 연결해주는 라이브러리

    공통적인 TTL 만료 시간을 정하거나,
    캐시 별 키 별로 TTL을 다르게 설정하거나, 직렬화, 역직렬화
    방식을 지정하는 등으로 사용한다

    @Configuration
    @EnableCaching // @Cacheable 활성화
    public class RedisConfig {
        @Value("${spring.data.redis.host}")
        private String host;
    
        @Value("${spring.data.redis.port}")
        private int port;
    
        @Bean
        public RedisConnectionFactory redisConnectionFactory() {
            return new LettuceConnectionFactory(host, port);
        }
    
        @Bean
        @Primary
        public RedisCacheManager redisCacheManager() {
            RedisCacheConfiguration defaultConfig = RedisCacheConfiguration.defaultCacheConfig()
                    .entryTtl(Duration.ofMinutes(15))
                    .serializeValuesWith(
                            RedisSerializationContext.SerializationPair
                                    .fromSerializer(RedisSerializer.json())
                    );
    
            // 캐시별 TTL 개별 설정
            Map<String, RedisCacheConfiguration> configs = new HashMap<>();
    
            //region 상품 관련 캐싱
            configs.put("productCache", defaultConfig.entryTtl(Duration.ofMinutes(30)));
            configs.put("categoryCache", defaultConfig.entryTtl(Duration.ofHours(1)));
            configs.put(PRODUCT_SEARCH, defaultConfig.entryTtl(Duration.ofMinutes(30)));
            //endregion
    
            //region 검색어 관련 캐싱
            configs.put(SEARCH_RANKING, defaultConfig.entryTtl(Duration.ofMinutes(10)));
    
            //region 이벤트 관련 캐싱
            configs.put("eventListCache", defaultConfig.entryTtl(Duration.ofMinutes(5)));
            //endregion
    
            return RedisCacheManager.builder(redisConnectionFactory())
                    .cacheDefaults(defaultConfig)
                    .withInitialCacheConfigurations(configs)
                    .build();
        }
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory());
    
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(RedisSerializer.json());
    
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(RedisSerializer.json());
    
            template.afterPropertiesSet();
            return template;
        }
    }
    • Spring Boot 4.X 기준

    작동 흐름

    @Cacheable 
    → 캐시 저장 시작 
    → RedisCahcheManager 
    → Redis 저장 호출 
    → Redis 저장

    @Cacheable 이 실제로 어디에 캐시를 저장하게 할지
    결정하는 것이 RedisCacheManager

    RedisTemplate

    Spring이 제공하는 Redis 클라이언트 템플릿

    → Java 코드로 Redis 명령어를 실행하게 해준다

    @Configuration
    public class RedisTemplateConfig {
        @Value("${spring.data.redis.host}")
        private String host;
    
        @Value("${spring.data.redis.port}")
        private int port;
    
        @Bean
        public RedisConnectionFactory redisConnectionFactory() {
            return new LettuceConnectionFactory(host, port);
        }
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
            RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(redisConnectionFactory());
    
            template.setKeySerializer(new StringRedisSerializer());
            template.setValueSerializer(RedisSerializer.json());
    
            template.setHashKeySerializer(new StringRedisSerializer());
            template.setHashValueSerializer(RedisSerializer.json());
    
            template.afterPropertiesSet();
            return template;
        }
    }
    • Spring Boot 4.X 기준

    RedisTemplate 명령어

    redisTemplate.opsForValue().set("user:1", "Test");
    String name = (String) redisTemplate.opsForValue().get("user:1");
    System.out.println(name);

    opsForValue()

    SET / GET

    opsForHash()

    HSET / HGET

    opsForList()

    LPUSH / LRANGE

    opsForSet()

    SADD / SMEMBERS

    opsForZSet()

    ZADD / ZRANGE

    TTL 만료시간 설정 예시

    // (key, value, 기간, 단위(초, 분, 시간))
    redisTemplate.opsForValue().set("temp:data", "123", 10, TimeUnit.MINUTES);

    Spring Boot 에서의 활용

    // 읽기 시 캐싱
    public Post getPost(Long postId) {
        String key = PREFIX + postId;
    
        // 캐시 확인
        Post cached = (Post) redisTemplate.opsForValue().get(key);
        if (cached != null) {
            System.out.println("Cache Hit");
            return cached;
        }
    
        // 없으면 DB에서 조회
        Post post = postRepository.findById(postId).orElseThrow(() -> new RuntimeException("Post not found"));
    
        // 캐시에 저장
        redisTemplate.opsForValue().set(key, post, 10, TimeUnit.MINUTES);
        return post;
    }
    

    💡

    설정부는 후에 Spring Boot 설정으로 다룰 예정

    Share article
    Contents
    RedisCacheManager작동 흐름RedisTemplateRedisTemplate 명령어TTL 만료시간 설정 예시Spring Boot 에서의 활용

    LifeLog, DevLog - https://github.com/KYJTHEYJ

    RSS·Powered by Inblog