[Redis] Redis Serializer 종류 (대표 3가지)
DB

[Redis] Redis Serializer 종류 (대표 3가지)

728x90

이전 글에서 Redis와 Redis의 자료구조에 대해서 다뤄보았습니다. 데이터가 저장되는 여러가지 자료구조가 있었지만 아무래도 검색속도는 key/value 로 저장해서 불러오는게 가장 빠르겠죠?

 

하지만 우리가 개발을 하다보면 항상 단순한 하나의 value만 저장하지는 않겠죠, 아마 높은확률로 객체를 저장해야하는 순간이 오게될것입니다.

 

어? 저번에 자료구조중에 Hash로 저장하면 하나의 key 에 여러개 field/value로 저장할 수 있다고했죠? 그걸로 객체를 저장하면 안되나요?

가능은 합니다! 하지만 Hash 구조로 객체 저장시 실질적으로 저장된 데이터를 보면 결국 여러개의 key/value 데이터가 존재한다는 것을 확인하실 수 있습니다. 이 때문에 단순 String 구조보다 상대적으로 많은 메모리를 차지하고 읽고 쓰는데 더 느릴 수 밖에 없겠죠.

 

근데 객체를 String으로 저장하고 불러올 수는 없잖아요;;

바로 그걸 가능하게 해주는게 오늘의 주제 Serializer 입니다! 지금부터 알아볼까요?


위에서 말한대로 Redis의 데이터는 프레임워크 관점에서보면 단순히 byte 이기 때문에 serializer를 통해 사용하는 쪽에서 포맷을 정하여 저장하고 불러오면 편하게 객체를 저장 및 조회할 수 있습니다.

 

JdkSerializationRedisSerializer

기본 Serializer입니다. 명시해주지 않는다면 사용됩니다.

Student student = new Student();
student.setId(1);
student.setName("dannyJae");
student.setGender("male");
        
// 저장        
redisTemplate.opsForValue().set("key", student);

 

StringRedisSerializer

JdkSerializationRedisSerializer로 저장한 데이터를 확인해보면 데이터가 조금 지저분하게 들어가 있는 것을 보실 수 있습니다 (패키지명도 보이고 등등). StringRedisSerializer는 쓸데없는(지저분한?) 값이 없는 상태로 저장합니다 

Student student = new Student();
student.setId(1);
student.setName("dannyJae");
student.setGender("male");

// Serializer 명시
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new StringRedisSerializer());

// 저장
redisTemplate.opsForValue().set("key", student);

 

JacksonJsonRedisSerializer

key는 String이지만 value 는 json으로 저장하게 해주는 serializer 입니다.

Student student = new Student();
student.setId(1);
student.setName("dannyJae");
student.setGender("male");

// Serializer 명시
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JacksonJsonRedisSerializer(Student.class));

// 저장
redisTemplate.opsForValue().set("key", student);

 

 

출처:
- 스프링 데이터 레디스
- spring-data redis serializer 사용하기
728x90

'DB' 카테고리의 다른 글

[MySQL] MMM, MHA  (0) 2023.04.10
[Elastic Stack] Elasticsearch 란?  (0) 2022.10.31
[Redis] Redis란?  (0) 2022.10.12