springboot集成redis时报错:org.springframework.data.redis.serializer.SerializationExceptionng 解决办法
系统B 程序执行 redisUtil.get(key)抛出异常错误信息org.springframework.data.redis.serializer.SerializationException: Could not deserialize: syntax error, pos 1, line 1, column原因:不同业务系统使用了同一个key,并且两个系统使用了不同的序列化策略,在系统A
·
系统B 程序执行 redisUtil.get(key)抛出异常
错误信息
org.springframework.data.redis.serializer.SerializationException: Could not deserialize: syntax error, pos 1, line 1, column
原因:
不同业务系统使用了同一个key,并且两个系统使用了不同的序列化策略,在系统A put,在系统B get,会抛出此异常
解决办法1:
修改系统B 配置
// value序列化方式采用jackson
template.setValueSerializer(new GenericFastJsonRedisSerializer());
改为
template.setValueSerializer(new StringRedisSerializer());
这种方法有个弊端,会影响到系统B中其他用到json格式key的业务,故采用方法2
解决办法2:
重构get方法
/**
* 通过使用redis默认的序列化获取String类型的值
*
* @param key 键
* @return String类型的值
*/
public String getStringBySer(String key) {
try {
return redisTemplate.execute((RedisCallback<String>) connection -> {
RedisSerializer<String> serializer = redisTemplate.getStringSerializer();
byte[] serialize = serializer.serialize(key);
if (serialize == null) {
return null;
}
byte[] value = connection.get(serialize);
return serializer.deserialize(value);
});
} catch (Exception e) {
return null;
}
}
更多推荐
已为社区贡献3条内容
所有评论(0)