记一次开发环境redis出现key丢失排查

开发环境大家共用redis集群, 出现设置的redis key随机丢失

 

1. 检查key是否设置了过期时间

执行ttl key

发现值是-1,并没有设定过期时间

 

2. 检查是否有人删除key,或者flushdb,flushall

执行info commandstats

cmdstat_XXX: calls=XXX,usec=XXX,usec_per_call=XXX


看出命令执行的次数、命令耗费的 CPU 时间(单位毫秒)、执行每个命令耗费的平均 CPU 时间(单位毫秒)

看看del,flushdb,flushall的次数,可能执行的时候已经有大量的调用,先执行config resetstat进行重置

 

3. 检查内存配置,是否超出内存设定被回收

a. info命令查看

evicted_keys: 因最大内存容量限制而被驱逐(evict)的键数量


当时发现evicted keys值大于0,怀疑内存不够

 

b. 检查是否设置最大内存

执行CONFIG GET maxmemory

c. 检查内存使用

执行info memory, 可以看到当前使用内存量,和峰值

d.看到设定了最大内存,内存也将要接近并且曾经的峰值非常大, 那就需要看看设定的淘汰策略

执行config get maxmemory-policy

发现设定的淘汰策略为: allkeys-lru

Redis提供6种数据淘汰策略:

volatile-lru:从已设置过期时间的内存数据集中挑选最近最少使用的数据 淘汰;
volatile-ttl: 从已设置过期时间的内存数据集中挑选即将过期的数据 淘汰;
volatile-random:从已设置过期时间的内存数据集中任意挑选数据 淘汰;
allkeys-lru:从内存数据集中挑选最近最少使用的数据 淘汰;
allkeys-random:从数据集中任意挑选数据 淘汰;
no-enviction(驱逐):禁止驱逐数据。(默认淘汰策略。当redis内存数据达到
 

至此大概率确认是内存不够导致KEY被删除。

 

列举2种解决方案: 

1. 调整合适的策略,内存不足清除过期的key

执行 config set maxmemory-policy volatile-lru

2. 设置更大的内存

CONFIG SET maxmemory XXXX

 

结果:

调整策略为volatile-lru后,经过观察,设定的key没有再出现丢失。

转自:https://blog.csdn.net/weixin_44037086/article/details/86589219

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值