缓存不规范,同事两行泪

事件起因

测试同学向我反馈说测试环境经常返回402(登录超时),而且超时时间还不固定,有时候是3分钟,有时候却是1分钟,最最关键的是生产环境并没有这个问题。

我脑子里第一反应是开发同学写了随机的过期时间,导致出现这样的情况。太不让人省心了吧,我已经想到那种尴尬的场面了,哈哈。

排查原因

看代码

一看代码,幸好没有第一时间杀过去,被啪啪打脸,还是贼肿的那种。

代码中都是设置了30分钟的过期时间。
image.png

直到看见了这段代码
image.png
大家都知道互联网发展迅速,服务器早就由单节点往分布式发展。而早期使用Session的项目由于单点问题开始使用spring-redis-session作为中心化解决方案。

这个注解会将jvm内存中的session以特定的数据结构的形式存放到Redis中,Redis缓存的过期时间就是注解中设置的值。

image.png

客户端差错

通过Redis客户端查看后发现,有些key总是会莫名其妙的随机消失。难道真是代码的问题?
我都开始怀疑自己的codeReview能力了。

幸好平时有积累,想到了一个可能,不是主动删除的,有没有可能是被动删除的。灵感来了,赶紧在Console打下I N F O,

image.png

原因

image.png
果然,Redis淘汰策略不是用了默认抛出异常的策略,导致在内存快满时将某些key给驱逐掉。

而导致内存占满的原因则是设置的过期时间太长,有些甚至是不删除。
image.png

解决

通知其他同事清除不需要用的Key,并且将这作为反面教材。。。。

思考

在使用缓存时,尽量设置RedisKey 的过期时间并且过期时间也不宜太长。比较热数据是要实时查询的,而冷数据的QPS不会大,在查询DB时修改到缓存中即可。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享