프로젝트에 캐시를 적용하기위해 redis를 사용하기로 하였다.
Redis 기본설정
build.gradle 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
yml 설정
spring:
data:
redis:
host: localhost
port: 6379
@Configuration
public class RedisConfig {
@Value("${spring.redis.host}")
private String host;
@Value("${spring.redis.port}")
private int port;
@Bean
public RedisConnectionFactory redisConnectionFactory(){
return new LettuceConnectionFactory(host, port);
}
@Bean
public RedisTemplate<String, Object> redisTemplate(){
RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory());
/*
Hash를 사용할 경우 Serializer
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setHashValueSerializer(new StringRedisSerializer());
*/
return redisTemplate;
}
@Bean
public RedisCacheManager redisCacheManager(){
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer()))
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericJackson2JsonRedisSerializer()))
.entryTtl(Duration.ofMinutes(10));
return RedisCacheManager.RedisCacheManagerBuilder.fromConnectionFactory(redisConnectionFactory())
.cacheDefaults(redisCacheConfiguration)
.build();
}
}
Java에서 Redis를 사용할때는 Lettuce와 Jedis 두가지의 클라이언트 라이브러리중 하나를 사용해야한다.
Spring Boot 2.x 이상부턴 기본적으로 Lettuce를 사용하며 이번 프로젝트에서도 Lettuce를 사용할것이다.
그리고 redis는 <key, value> 구조로 사용되기때문에 직렬화를 해주어야한다. key는 String 형식으로 직렬화, value는 json 형식으로 직렬화하는것으로 구성하였다.
또한 Redis에서 Cache를 사용하기위해선 RedisCacheManager를 Bean으로 등록해줘야한다.
RedisCacheConfiguration을 작성해준다 serializeKeysWith()와 serialzeValuesWith()를 통해 Key, Value의 직렬화 방법을 설정해 주어야하는데 우리는 위에서 각각 String과 Json형식으로 직렬화 하기로 구성하였으니 똑같은 방법으로 구성해준다.
entryTtl()은 캐시의 만료시간을 설정할수있는데 본 프로젝트에선 10분으로 설정하였다.
다음으로 RedisCacheManager에 redisConnectionFactory와 방금 설정한 redisCacheConfiguration을 연결해준다.