RedisTemplate:我不背锅,是你用错了
今天分享一个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:我不背锅,是你用错了的更多相关文章
- C++ 是 编程界 的 背锅侠
C++ 是 编程界 的 背锅侠, C++ 背的包袱 之 庞大复杂, 举世瞩目, 令人感动 . C++ 标准 委员会 俨然 已成了一个 职业 . C++ 把 静态编译 体系 发展到 庞大复杂, C ...
- 大公司病,为什么要PPT背锅?
新东方年会上,一曲吐槽式的<释放自我>火遍网络,据说这六位员工,是冒着被解雇的风险完成演出的,歌词内容涉及到非常敏感的大企业病,如机构臃肿.效率低下.内耗甩锅.拍领导马屁等等,而最高潮的部 ...
- 一个神秘URL酿大祸,差点让我背锅!
神秘URL 我叫小风,是Windows帝国一个普通的上班族.上一回说到因为一个跨域请求,我差点丢了饭碗,好在有惊无险,我的职场历险记还在继续. "叮叮叮叮~~~~",闹钟又把我给吵 ...
- Memcached 的惹祸,.NET 5.0 的背锅
抱歉,拖到现在才写这篇为 .NET 5.0 洗白的博文(之前的博文),不好意思,又错了,不是洗白,是还 .NET 5.0 的清白. 抱歉,就在今天上午写这篇博客的过程中,由于一个bug被迫在访问高峰发 ...
- 【故障公告】Memcached 的“惹祸”,不知在为谁背锅
在 .NET 5.0 背锅 . Memcached 的惹祸 .缓存雪崩之后,我们没有找到问题的真正原因,我们知道没有找到根源的故障总是会再次光临的,不是在这周就是在下周,也许就在双11前后. 就在今天 ...
- 《.NET 5.0 背锅案》第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore
在第1集的剧情中,主角是".NET 5.0 正式版 docker 镜像",它有幸入选第1位嫌疑对象,不是因为它的嫌疑最大,而是它的验证方法最简单,只需要再进行一次发布即可.我们在周 ...
- 《.NET 5.0 背锅案》第3集-剧情反转:EnyimMemcachedCore 无罪,.NET 5.0 继续背锅
今天晚上基于第2集中改进版的 EnyimMemcachedCore 进行了发布,发布过程中故障重现,最大的嫌犯 EnyimMemcachedCore 被证明无罪,暂时委屈 .NET 5.0 继续背锅. ...
- 《.NET 5.0 背锅案》第4集:一个.NET,两手准备,一个issue,加倍关注
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第5集-案情大转弯:都是我们的错,让 .NET 5.0 背锅
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
- 《.NET 5.0 背锅案》第6集-案发现场回顾:故障情况下 Kubernetes 的部署表现
第1集:验证 .NET 5.0 正式版 docker 镜像问题 第2集:码中的小窟窿,背后的大坑,发现重要嫌犯 EnyimMemcachedCore 第3集-剧情反转:EnyimMemcachedCo ...
随机推荐
- Linux系统安装及配置ftp服务
1. 先用rpm -qa| grep vsftpd命令检查是否已经安装,如果ftp没有安装,使用yum -y install vsftpd 安装,(ubuntu 下使用apt-get instal ...
- 常用的GIT
# 初始化相关 git init git add . git commit -m "test001" git remote origin https://github.com/fa ...
- 吴裕雄--天生自然 PHP开发学习:在CenterOS 7 系统安装配置PHP 7
执行命令"yum install httpd"进行安装,然后在选择处,我们输入y,等待软件安装完毕.安装完成后,Apache配置文件路径是:/etc/httpd/conf/http ...
- 树状数组 hdu2689 hdu2838
题意:给定一个正整数n,和一个1-n的一个排列,每个数可以和旁边的两个数的任意一个交换,每交换一次总次数就要加一,问将这个排列转换成一个递增的排列需要多少次交换? 题意可以转换成求这个排列的逆序对数. ...
- django框架进阶-ModelForm组件-长期维护
############################################################ """ 通常在Django项目中,我们编写的大部 ...
- Reading
Reading一共18min 需要背诵专业学科分类的词汇. 单词上,背四级词汇和托福词汇,达到约1w词汇. 句子上,练习速度和用词准确,其中准确包括含义准确和语序准确.
- testNG报告优化,testNG-xslt
一.在使用testNG自动化框架执行测试用例后,会自动生成HTML的测试报告,但是过于简单,信息展示极少,也没有图表说明,所有我们使用testNG-xslt进行美化. 二.具体实现步骤: 1.在网站下 ...
- IoC容器设计
本文主要摘录于 Spring技术内幕-深入即系Spring架构和设计原理(许文柯著). IoC是根据两个核心BeanFactory和ApplicationContext来设计的,这里先放一张Spri ...
- ajax异步的加深理解
过去印象中的ajax的异步操作,一直还居然在$.ajax函数内部的异步,真是大错特错,实际的异步操作,是针对整个js文件来的. 今天总算意识到了,实际情况如下: $(function(){ //[弹框 ...
- MAVEN实现多环境搭建
在实际的开发中,会遇到开发环境的不同(开发环境,测试环境,线上环境),会来回根据环境的不同修改配置文件,一不小心修改错误导致无法正常运行,故障排除导致开发效率低.使用maven可以根据环境的不同,自动 ...