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 가이드