스프링의 @EnableCache 설정과 @Cacheable 설정을 사용하면 매우 쉽게 레디시를 캐시로 사용할 수 있어서 편리하다. 한 가지 불편한 점이 있다면 캐시키를 JDK 직렬화를 사용해서 저장한다는 것이다. 그러다보니 상상한 레디스 키가 cache:1:2:3" 문자열이어도(캐시 이름 cache, 키 "1:2:3") 실제 레디스에 들어간 키는 "cache:타입데이터1:2:3" 이런 모양이 된다. 이는 레디스에 직접 연결해서 데이터를 확인할 때 불편함을 준다.
JDK 직렬화 대신 문자열로 키를 생성하는 KeySerializer를 사용하면 이 단점을 보완할 수 있다. 이를 하려면 직접 RedisTemplate을 생성해주면 된다. 다음은 코드 구현 예이다.
import java.net.UnknownHostException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
@Configuration
public class RedisTemplateConfiguration {
@Bean
@Primary
public RedisTemplate<Object, Object> redisTemplate(
RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
return template;
}
}
StringRedisSerializer는 키 값을 직렬화할 때 String.getBytes()를 사용하므로 JDK 직렬화를 사용할 때처럼 불필요한 타입정보가 붙지 않는다.