이전 글에서 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 사용하기
'DB' 카테고리의 다른 글
[MySQL] MMM, MHA (0) | 2023.04.10 |
---|---|
[Elastic Stack] Elasticsearch 란? (0) | 2022.10.31 |
[Redis] Redis란? (0) | 2022.10.12 |