
RedisSerializer
Redis는 메모리 기반 key-value 저장소이기 때문에, 자바 객체를 직접 넣을 수는 없다.
- 자바 객체(Object) -> 바이트 배열 (byte[]) -> Redis 저장
- Redis에 저장된 바이트 배열 -> 자바 객체(Object)
이 변환 과정을 해주는 게 바로 Serializer/Deserializer (직렬화/역직렬화)이다.
스프링에서는 이 과정을 편하게 할 수 있도록 여러 가지 RedisSerializer 구현체를 제공한다.
스프링 Redis 직렬화/역직렬화 종류
1) `StringRedisSerializer`
자바의 String을 바이트 배열 변환을 담당한다. UTF-8 인코딩/디코딩을 사용하고 Redis 자체가 key-value를 문자열 기반으로 관리하기 때문에, key 직렬화에 가장 많이 사용된다.
2) `JdkSerializationRedisSerializer`
자바의 기본 직렬화(ObjectOutputStream, ObjectInputStream)을 사용한다. 모든 Serializable 객체를 저장할 수 있지만, Redis에 저장된 것은 바이너리라 사람이 읽기 어렵다. 크기도 크고 성능도 좋지 않기 때문에 거의 사용하지 않는다.
3) `Jackson2JsonRedisSerializer`
Jackson(ObjectMapper)을 이용해서 객체를 JSON 문자열로 직렬화한다. 사람이 읽을 수 있는 JSON이 Redis에 저장된다. 성능도 적당히 빠르고, 유지보수하기도 쉬워 실무에서 가장 많이 사용된다.
4) `GenericJackson2JsonRedisSerializer`
`Jackson2JsonRedisSerializer`와 비슷하지만, 타입 정보(`@class`)를 포함해서 저장한다. 그래서 꺼낼 때 타입을 몰라도 알아서 변환된다는 장점이 있다. 여러 타입 객체를 한 Redis에 저장할 때 유용하다.
Config 예시
보통은 key → StringRedisSerializer, value → Jackson2JsonRedisSerializer 조합을 사용한다.
@Configuration
public class RedisConfig {
@Bean // RedisTemplate을 Bean으로 등록
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
// Key는 문자열 직렬화
template.setKeySerializer(new StringRedisSerializer());
// Value는 JSON 직렬화
Jackson2JsonRedisSerializer<Object> serializer =
new Jackson2JsonRedisSerializer<>(Object.class);
template.setValueSerializer(serializer);
return template;
}
}
RedisTemplate 이란 ?
스프링에서 Redis와 연결해서 명령어를 실행할 수 있게 해주는 헬퍼(Helper) 객체이다. JdbcTemplate이 SQL 실행을 도와주는 것 처럼 RedisTemplate은 Redis 명령 실행을 도와준다. 내부적으로는 RedisConnectionFactory 를 통해 실제 Redis 서버와 연결된다.
'Redis' 카테고리의 다른 글
| [Redis] Redis Pub/Sub (0) | 2025.09.11 |
|---|---|
| [Redis] Redis란 무엇인가 ? (0) | 2025.09.09 |