緩存不規範,同事兩行淚

事件原由

測試同窗向我反饋說測試環境常常返回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時修改到緩存中便可。

相關文章
相關標籤/搜索