线上RedisTemplate的value序列化设置如何无感的由JdkSerializationRedisSerializer替换为GenericJackson2JsonRedisSerializer

是码农还是程序员呢 发布于 01/27 19:43
阅读 113
收藏 0

现在线上是这样配置的RedisTemplate,是能够正常使用的。

@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
    RedisTemplate<String, Byte[]> template = new RedisTemplate<>();
    template.setConnectionFactory(connectionFactory);
    template.setKeySerializer(new StringRedisSerializer());
    // value序列化方式要替换为GenericJackson2JsonRedisSerializer
    template.setValueSerializer(new JdkSerializationRedisSerializer());
    template.setHashKeySerializer(new StringRedisSerializer());、
    // hashValue序列化方式要替换为GenericJackson2JsonRedisSerializer
    template.setHashValueSerializer(new JdkSerializationRedisSerializer());
    template.afterPropertiesSet();
    return template;
}

有个问题是,使用JdkSerializationRedisSerializer序列化的数据,查看value值容易产生值乱码的感觉,非常不方便排查问题!

如图:

现在也知道将value的序列化方式替换成GenericJackson2JsonRedisSerializer即可,便不会查看是这样一种乱码的感觉。

替换后:

@Bean
public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) {
	RedisTemplate<String, Object> template = new RedisTemplate<>();
	template.setConnectionFactory(connectionFactory);
	template.setKeySerializer(new StringRedisSerializer());
	template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
	template.setHashKeySerializer(new StringRedisSerializer());
	template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
	template.afterPropertiesSet();
	return template;
}

但是这样出现了另一个问题,而且非常严重,导致现在不敢替换。

已经在Redis中存在的数据,如果替换后,进行反序列化解析就会报错:

com.fasterxml.jackson.core.JsonParseException: Unexpected character ('¬' (code 172)): expected a valid value (number, String, array, object, 'true', 'false' or 'null')
 at [Source: (byte[])"�� sr java.lang.Integer⠤���8 I valuexr java.lang.Number������  xp �"; line: 1, column: 2]

 

现在如何能够成功替换且不影响现有数据呢?

加载中
0
Cobbage
Cobbage

缓存数据清了呗

如果不能够清除可以尝试两个方式的bean都存在,老数据走老的新数据走新的但是需要能够区分新老数据。

或者你写个 工具类把老数据的全不用新数据转换保存下

是码农还是程序员呢
是码农还是程序员呢
太多了,线上还有很多持久化存储的数据
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部