😥Spring에서 Redis를 활용하려고 여러 자료를 검색했을 때, 많은 개발자들이 아래와 같은 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;
}
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(company);
redisTemplate.opsForValue().set("company",s);
🤔위 코드는 객체를 ObjectMapper를 이용해 String으로 변환 후 저장하는 방법을 보여줍니다.
@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
가 더 많은 기능을 제공하므로, 이를 선택하는 것이 더 좋습니다.