当redis在Java中使用的时候,碰到序列化的Jackson2JsonRedisSerializer的时候,从redis中取字符串值,一直报错取不出来,但是数字可以取出来,问题就出在了序列化后存储的规范。(错误:Unrecognized token ‘code’: was expecting (JSON String, Number, Array, Object,‘true’, ‘false’ or ‘null’) )

通过序列化存到redis中的样子
在这里插入图片描述

普通的样子
在这里插入图片描述
可以看到是有区别的,所以取值错误,只要通过序列化存值,再取值是不会出错的

我们这里针对StringRedisSerializer,Jackson2JsonRedisSerializer和JdkSerializationRedisSerializer进行测试。

下面是,把3种Serializer保存到Redis中的结果:

1,所有的KeySerializer和HashKeySerializer都使用StringRedisSerializer,用其它Serializer的没有什么意义,就像最上面的例子一样。
2,上面序列化后的值,是保存到redis中的值,从Redis中读取回Java中后,值的内容都是一样的。

在这里插入图片描述

从上面的结果不难看出,

1,用StringRedisSerializer进行序列化的值,在Java和Redis中保存的内容是一样的

2,用Jackson2JsonRedisSerializer进行序列化的值,在Redis中保存的内容,比Java中多了一对双引号。

3,用JdkSerializationRedisSerializer进行序列化的值,对于Key-Value的Value来说,是在Redis中是不可读的。对于Hash的Value来说,比Java的内容多了一些字符。

(如果Key的Serializer也用和Value相同的Serializer的话,在Redis中保存的内容和上面Value的差异是一样的,所以我们保存时,只用StringRedisSerializer进行序列化)

看玩点赞哦!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐