线上运行的系统出现键丢失的情况。通过redis-cli登录redis,输入info命令查看redis内存使用情况。如图所示:

可见内存已经被使用的差不多了,内存使用峰值已经超过redis最大内存量,触发了内存回收策略,导致后续写入内存操作被拒绝了。造成“键丢失”的现象。
redis内存淘汰策略有6种:
- noeviction:当内存不足以容纳新写入数据时,新写入操作会报错
- allkeys-lru:当内存不足以容纳新写入数据时,在键空间中,移除最近最少使用的key(这个是最常用的)
- allkeys-random:当内存不足以容纳新写入数据时,在键空间中,随机移除某个key。
- volatile-lru:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,移除最近最少使用的key
- volatile-random:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,随机移除某个key
- volatile-ttl:当内存不足以容纳新写入数据时,在设置了过期时间的键空间中,有更早过期时间的key优先移除
- volatile-lfu(redis 4新增):从所有配置了过期时间的键中驱逐使用频率最少的键
- allkeys-lfu(redis 4新增):从所有键中驱逐使用频率最少的键
通过设置maxmemory-policy属性修改内存回收策略。
账号密码登录redis命令行输入指令如下,不用重启redis更新相关配置项。
config set maxmemory-policy allkeys-lru
config rewrite
本文探讨了线上系统中Redis出现键丢失的原因,详细解释了由于内存使用超过阈值触发内存回收策略而导致的键丢失现象。介绍了Redis的六种内存淘汰策略,包括noeviction、allkeys-lru、allkeys-random、volatile-lru、volatile-random、volatile-ttl、volatile-lfu和allkeys-lfu,并展示了如何通过maxmemory-policy属性设置不同的内存回收策略。
116

被折叠的 条评论
为什么被折叠?



