相信用Redis的小伙伴都有遇到过key丢失的问题,当然,每个人的用的策略不一样也可能会导致解决问题的方案不一样。本文主要的主要原因内存不足导致的。
1.首先要先检查key是否设置了过期时间
可以使用命令查看
ttl key
如果值是-1,表示没有设定过期时间
2.检查是否有人删除了key或者flushdb和flushall
执行info commandstats
如图1,格式将会是cmdstat_xxx: calls=???,usec=???,user_per_call=???的出现
1.命令执行的次数 2.命令耗费的cpu时间ms 3.执行每个命令耗费的平均cpu时间ms
可以查看del、flushdb、flushall的次数,可能执行时已经有大量的调用,可以先执行config resetstat进行重置
3.检查内存的配置,然后再查看是否超出内存设定的参数导致被回收
可以使用命令 info 查看
evicted(驱逐)_keys: 因最大内存容量限制而被驱逐的键数量
如果evited keys大于0的情况表示已经进行了驱逐,可以往内存不足的方向去寻找问题。
4.检查是否设置了最大内存
config get maxmemory 可以进行查看
5.检查内存使用情况
info memory 查看当前内存量和峰值
6.如果设定了最大内存,内存也接近并且峰值非常的大,就要看看淘汰策略是否合适。
6.1 先查看当前策略
config get maxmemory-policy
因为先前是去人是内存问题删除的key,所以可以
1.淘汰策略更改为volatile-lru
2.设置最大内存 config set memory ???