背景:
使用redisTemplate进行写值、读值测试,发现写、读均正常。然后在本地redis库中,通过key值读取maven工程中刚才通过redisTemplate存储的数值时,发现获取不到,于是我实验了一番
步骤 操作
步骤1 创建RedisTemplate对象
步骤2 使用opsForValue().set方法存储数据
步骤3 使用opsForValue().get方法查询数据
console中取值没问题
然后我到本地redis命令行中去取值:
由于我只是放了一个key:value, 所以我直接用keys * 来查了一下是不是存在这个key,结果如下:(出现了一堆不知道是啥的东西)
据我了解,这是实际向redis存储的时候转化成了16 进制数组了,所以是这样的展示
经过一番研究。直接上解决办法:
代码中添加代码:
//序列化key
redisTemplate.setKeySerializer(new StringRedisSerializer());
console结果如下:能正常读取
本地redis中尝试读取
上面未读到值是因为,不是没有存储进去,其实已经存储了,只是存储的key不是name3,而是 1) “\xac\xed\x00\x05t\x00\x05name3” 16 进制串,所以通过get name3 未拿到数据,由于我制定了向redis中存储的时候了,key的序列化的方式了,所以这个里面的key 直接就以name3 的形式存储到了redis中,所以此时通过 get name3 能读取到了数据;但是随之另外一个问题出现了,key序列化之后,通过key:name3 能读取到数据了,而且读取到的数据在console中显示正常
但是在redis中查询显示还是16 进制内容:
所以此时也对存储到redis的value也进行序列化:
//序列化value
redisTemplate.setValueSerializer(new StringRedisSerializer());
console读取正常:
此时redis中value读取出来也正常了。
至此,我们的问题都解决啦~
补充:常见的序列化方式,可以见另外一篇博客 :待补充~
路漫漫其修远兮,吾必将上下求索~
到此关于Redis为何查不出来就算告一段落了,如果你认为博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧转载请注明出处哦