缓存不规范,同事两行泪

事件原由

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

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

排查缘由

看代码

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

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

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

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

image.png

客户端差错

经过Redis客户端查看后发现,有些key老是会莫名其妙的随机消失。难道真是代码的问题? 我都开始怀疑本身的codeReview能力了。数据结构

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

image.png

缘由

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

而致使内存占满的缘由则是设置的过时时间太长,有些甚至是不删除。 image.png测试

解决

通知其余同事清除不须要用的Key,而且将这做为反面教材。。。。

思考

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

相关文章
相关标签/搜索