相信用Redis的小伙伴都有遇到過key丟失的問題,當(dāng)然,每個人的用的策略不一樣也可能會導(dǎo)致解決問題的方案不一樣。本文主要的主要原因內(nèi)存不足導(dǎo)致的。
1.首先要先檢查key是否設(shè)置了過期時間
可以使用命令查看
ttl key
如果值是-1,表示沒有設(shè)定過期時間
2.檢查是否有人刪除了key或者flushdb和flushall
執(zhí)行info commandstats
如圖1,格式將會是cmdstat_xxx: calls=???,usec=???,user_per_call=???的出現(xiàn)

截屏2022-10-06 下午2.01.30.png
1.命令執(zhí)行的次數(shù) 2.命令耗費的cpu時間ms 3.執(zhí)行每個命令耗費的平均cpu時間ms
可以查看del、flushdb、flushall的次數(shù),可能執(zhí)行時已經(jīng)有大量的調(diào)用,可以先執(zhí)行config resetstat進行重置
3.檢查內(nèi)存的配置,然后再查看是否超出內(nèi)存設(shè)定的參數(shù)導(dǎo)致被回收
可以使用命令 info 查看
evicted(驅(qū)逐)_keys: 因最大內(nèi)存容量限制而被驅(qū)逐的鍵數(shù)量

截屏2022-10-06 下午2.08.47.png
如果evited keys大于0的情況表示已經(jīng)進行了驅(qū)逐,可以往內(nèi)存不足的方向去尋找問題。
4.檢查是否設(shè)置了最大內(nèi)存
config get maxmemory 可以進行查看
5.檢查內(nèi)存使用情況
info memory 查看當(dāng)前內(nèi)存量和峰值

截屏2022-10-06 下午2.14.09.png
6.如果設(shè)定了最大內(nèi)存,內(nèi)存也接近并且峰值非常的大,就要看看淘汰策略是否合適。
6.1 先查看當(dāng)前策略
config get maxmemory-policy
因為先前是去人是內(nèi)存問題刪除的key,所以可以
1.淘汰策略更改為volatile-lru
2.設(shè)置最大內(nèi)存 config set memory ???