美文网首页
RedisTemplate:我不背锅,是你用错了

RedisTemplate:我不背锅,是你用错了

作者: 猿天地 | 来源:发表于2020-03-11 13:53 被阅读0次

今天分享一个RedisTemplate的问题,感兴趣的可以继续看下去了,不感兴趣的继续撩妹去吧!

如下图:一位朋友给了我一个报错的图片,为啥为啥取不到值?

我也有点懵,第一反应就是RedisTemplate和StringRedisTemplate会不会用的两个不同的Connection,导致相同的Key一个能查到,一个不能查到。

经过反复确认,Connection没问题,是同一个,还是那句话:每个奇怪问题的背后一定有故事。

只能调试源码了呗,还能怎么办。最后在redis.clients.jedis.BinaryJedis#hget中发现了问题,就是Redis压根就没有返回数据。

现在的问题就剩下为什么StringRedisTemplate的查询可以返回数据,RedisTemplate的查询却不能返回数据?

我们来屡一下StringRedisTemplate和RedisTemplate的关系,StringRedisTemplate继承了RedisTemplate,是专门用于字符串操作。

RedisTemplate一般用于比较复杂的对象操作,区别就在于序列化的不同。

于是我用redis客户端查看了存储的数据格式,发现这个Hash的格式是字符串。

这也就是为什么用StringRedisTemplate可以获取到,估计存储的时候就是用的StringRedisTemplate。

RedisTemplate默认的序列化方式是JDK序列化,格式不对。

于是查看了RedisTemplate的构造方式,发现就是序列化方式不一致。

于是将jdkSerializationRedisSerializer改成了stringSerializer。重新跑了一遍测试还是不行。于是我看了下RedisTemplate对象的信息,如下:

valueSerializer是改过来了,但是hash有专门的序列化,还是JDK。

那就全部改成一样的吧,如下:

然后就能获取到了,个人感觉这个还是一个使用的问题,可能大家都以为这2个RedisTemplate是一样的,没什么差别,所以才导致了本文出现的问题。

如果你够细心,其实看下源码就知道这2个类的区别了。

StringRedisTemplate构建的时候默认设置了所有的序列化方式为String,也就是说StringRedisTemplate的数据格式都是String。

RedisTemplate没有设置的话就都是JDK。

相关文章

  • RedisTemplate:我不背锅,是你用错了

    今天分享一个RedisTemplate的问题,感兴趣的可以继续看下去了,不感兴趣的继续撩妹去吧! 如下图:一位朋友...

  • 不背锅

    你想去的远方,即使我曾跌的面目全非,我陪你去。 未知的未来,莫名的远方,都是一种流浪。 你说要稳定的生活,要安逸,...

  • 你是产品,这个锅你不背谁背,我们都是按照你说的做的

    众人:“你是产品,这个锅你不背谁背,我们都是按照你说的做的”。 PM:“我,我,我.....唉” 作为产品的同僚,...

  • '不' 这个锅我不背

    时别几个月以后,我再次成为一部分人口中心灵手巧的男孩,为什么咧?ԅ(¯﹃¯ԅ)。 心血来潮吧! (›´ω`‹ ...

  • 我不背这个锅

    1、我工作到结婚那八年的工资卡都在你手里,你把我跟你们两口子的钱都攒着给我哥结婚用了,到我结婚你一分钱没给,还是L...

  • 这锅我不背

    各位亲爱的我知道那些话都是从哪传出来的也大概能猜透说这些话的人的目的到底是什么,但我话就撂在,什么我和哪个老师关系...

  • 这个锅我不背

    (一)昨天上午把家里的电风扇都拿出来一清洗,准备开扇。结果下午就刮风下暴雨,我发个朋友圈,把朋友都乐呵了。有个微友...

  • 这锅我不背

    如果被喜欢是我的错 那我请求你收回你昂贵的喜欢 这黑锅太沉重我背不动

  • 这锅我不背

    今天放学带路队出校门,今天晚托人数较多,所以队伍拉得比较长,而我又在队伍的后方,所以没看到事情的源头。 我只看见校...

  • 这个锅我不背?

    夏天出生的宝宝有一点很不好,就是容易长痱子。 家里不明所以的大人就说,是因为我吃了上火的东西,才导致宝宝长疹子的。...

网友评论

      本文标题:RedisTemplate:我不背锅,是你用错了

      本文链接:https://www.haomeiwen.com/subject/dwfcjhtx.html