spring redis 직렬화 (1)

greenTea·2023년 6월 27일
0

spring redis 직렬화

😥Spring에서 Redis를 활용하려고 여러 자료를 검색했을 때, 많은 개발자들이 아래와 같은 config 파일을 생성해서 사용하는 것을 확인했습니다.

config파일

	@Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

   
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new StringRedisSerializer());


        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new StringRedisSerializer());

  
        return template;
    }

🫡위 설정은 직렬화 및 역직렬화 시 String 타입을 사용하겠다는 것을 나타냅니다. 따라서, 이 설정을 사용하면 Redis에 값을 저장할 때 String 타입으로 변환해야 합니다.

예시 코드

@AllArgsConstructor
@NoArgsConstructor
@Data
public class Company   {
    private String name;
    private Long age;
}

string으로 변경 후 저장

ObjectMapper objectMapper = new ObjectMapper();
        String s = objectMapper.writeValueAsString(company);
        redisTemplate.opsForValue().set("company",s);

🤔위 코드는 객체를 ObjectMapper를 이용해 String으로 변환 후 저장하는 방법을 보여줍니다.

직렬화 -> Generic으로 변경

	@Bean
    public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate<String,Object> template = new RedisTemplate<>();
        template.setConnectionFactory(redisConnectionFactory);

   
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());


        template.setHashKeySerializer(new StringRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());

  
        return template;
    }

🧐위 설정을 사용하면 객체를 직접 저장할 수 있게 됩니다. 하지만 GenericJackson2JsonRedisSerializer는 클래스 정보까지 저장하기 때문에 클래스 정보가 변경되면 오류가 발생할 수 있습니다.

객체 직접 저장

redisTemplate.opsForValue().set("company",company);

결론

🫡약 config 파일을 작성하지 않으면, 기본적으로 JdkSerializationRedisSerializer가 사용됩니다. 각 방법에는 장단점이 있으므로, 본인에게 가장 적합한 것을 선택하시면 됩니다.

Jackson2JsonRedisSerializer도 있지만, GenericJackson2JsonRedisSerializer가 더 많은 기능을 제공하므로, 이를 선택하는 것이 더 좋습니다.

profile
greenTea입니다.

0개의 댓글