redis客户端库中查不到问题的解决记录

文章描述了一次由于Redis缓存操作引发的问题,问题起因在于代码中的序列化处理不正确,导致在数据库中查询不到key。作者通过检查Redis服务器、redisTemplate的set/get方法,发现了可能是序列化问题。在Spring启动类上增加序列化配置后,问题得到解决,但提醒注意此改动可能影响其他使用redisTemplate的代码。
摘要由CSDN通过智能技术生成

1.问题起因

由于业务相关需要在代码中添加配置相关操作,由于该接口各个模块都需要调用该服务,因此在接口中用redis做了缓存(首次查询在redis中没有查库,然后保存到redis中,再次查询走redis查询后返回),在代码中流转没有问题,但是为了保证准确性,使用redis客户端连接到库中进行搜索发现找不到该key:查询如下图

 2.排查问题

a).首先检查redis服务器异常,redis库ip或者db不对(检查发现都没有问题)

b).那么代码中使用的redisTemplate中的set/get方法是否遵循了某种规范

set方法对value进行转换 String -> byte[]

get方法在获取的时候把key进行转换String -> byte[]

那么在获取key的时候把key转换成byte[]进行获取是否就有值了

按照redis的规则对key进行转换发现方法是protected的,无法访问

那么转换思路,我再去调用一次set方法,观察当前db中的数量是否增加,然后排查增加的是那一个数据

于是修改开发环境redis配置把db切换到一个数据非常少的库中,然后重新掉接口,保存数据,在redis客户端发现多了一个乱码的集合,如图

至此,问题基本可以确定就是由于序列化的问题导致的,在spring的启动类上增加如下配置

 

 再次进行测试(结果正常)

 至此,问题解决!!!!

备注:

在没有加序列化的时候增加的key,在增加序列化之后是识别不到的,因此在增加该配置的时候需要在服务中搜索一下,其他人是否使用了redisTemplate,如果使用则要评估下是否会影响他人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值