redis的序列化问题配置
- 最初版本,使用jdk序列化进行序列化实现,该方法可以实现,但是存在性能问题,并且在redis中存储的数据无法直观查看(存在乱码
@EnableCaching
@Configuration
@AutoConfigureBefore(
name = {"org.redisson.spring.starter.RedissonAutoConfiguration", "org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration"}
)
public class RedisTemplateConfig {
@Bean
@Primary
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setHashKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setHashValueSerializer(new JdkSerializationRedisSerializer());
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
public RedisTemplateConfig() {
}
}
- 修改之后的版本,使用Jackson2JsonRedisSerializer进行实现,在存储对象时出现问题,返回的redis对象不属于原来的数据类型,无法转换成原来的数据类型,但是在使用过程中可以将对象转成json进行存储,redis服务器端无乱码问题
@Bean(name = "jackson2JsonRedisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
return template;
}
- 最终版本,无序列化和类型转换问题,服务器端无乱码
@Bean(name = "jackson2JsonRedisTemplate")
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 Jackson2JsonRedisSerializer<>(Object.class));
return template;
}