새소식

반응형
Spring/etc

[Spring] Cache Abstraction 사용 (Redis)

  • -
반응형

Spring을 통해 WebApplication을 작성할 때 Redis를 크게 두 가지 방향으로 쓸 수 있을 것 같다. 

  • @Cacheable, @CacheEvict 등의 애너테이션을 활용한 Cache 용도 
  • RedisTemplate를 활용한 다양한 자료구조에 데이터 관리(CRUD)

먼저 Cache로 사용하는 방법을 알아보자. 

 

의존성

    implementation 'org.springframework.boot:spring-boot-starter-data-redis'

 

Spring에서 @Cacheable, @CacheEvict, @CachePut과 같은 애너테이션을 만들어 두었고 

해당 애너테이션이 어떻게 동작할지는 자신이 원하는 Cache Framework의 구현체만 주입해 주면 된다. 

-> CacheManager 

 

CacheManager 

@Bean
CacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    RedisCacheConfiguration redisCacheConfig = RedisCacheConfiguration.defaultCacheConfig()
                                                                          .serializeKeysWith(SerializationPair.fromSerializer(new StringRedisSerializer()))
                                                                          .serializeValuesWith(SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
                                                                          .entryTtl(Duration.ofMinutes(1L))
                                                                          .disableCachingNullValues()
                                                                          .prefixCacheNameWith("he-he");

    return RedisCacheManager.RedisCacheManagerBuilder
            .fromConnectionFactory(connectionFactory)
            .cacheDefaults(redisCacheConfig)
            .build();
}

CacheManager를 만들기 위해서는 ConnectionFactory가 필요하다. 

-> Cache Framework에 접근하기 위한 Client 역할이라고 이해했다.. 

 

spring-data-redis에서 기본으로 제공하는 connectionFactory는 jedis, lettuce가 있다. 

Bean을 주입하지 않고 실행시켜 보았는데 정상 동작하는 것으로 보이고, default로 lettuce를 사용하도록 되어있는 것으로 보인다. 

 

application.yml

spring-cache, spring-data-redis 등에 대한 설정을 넣어준다. 

위의 RedisCacheConfiguration에서 코드로 넣어줄 수도 있고, 설정 yml에 따로 모아서 설정할 수도 있다.

spring:
  cache:
    type: redis
    redis:
      key-prefix: 'hi-hi'
      time-to-live: 1m
  redis:
    lettuce:
      pool:
        min-idle: 1
        max-idle: 8
    port: 1111
    host: localhost

추가적으로 @EnableCaching 애너테이션을 추가해 주어야한다. 

 

관련 Spring 가이드

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.