Redis BigKey 淘汰卡顿的根本解法是开启 lazyfree-lazy-eviction(6.0+稳定),配合 UNLINK 替代 DEL,并定期用 redis-cli --bigkeys -i 0.001 在从节点扫描;淘汰策略应统一选 allkeys-lfu,禁用 volatile-ttl,集群下需定位并拆分倾斜的 BigKey。

Redis 遇到 BigKey 时触发内存淘汰,主线程会同步释放内存,直接卡死——这不是命令慢,是驱逐过程阻塞了整个事件循环。根本解法不是换策略,而是让驱逐异步化。
lazyfree-lazy-eviction 必须开,否则所有淘汰策略都白搭
Redis 4.0+ 默认在 evict 阶段同步释放 BigKey 内存(尤其是 DEL 大 hash 或大 zset),主线程会卡住几十毫秒甚至秒级。即使你用了 allkeys-lfu,只要没开异步驱逐,照样卡。
-
CONFIG SET lazyfree-lazy-eviction yes是唯一能切断“淘汰 → 卡顿”链路的配置项 - 该参数只影响内存不足时的驱逐行为,不影响过期键清理(那是
lazyfree-lazy-expire的事) - 必须搭配
UNLINK替代DEL:对已知 BigKey 手动清理时,UNLINK立即返回,释放交由后台线程 - 注意:
lazyfree-lazy-eviction在 Redis 6.0+ 才真正稳定,3.2.x 不支持,别白费劲
redis-cli --bigkeys 扫描本身就会卡,得控制采样粒度
线上跑 redis-cli --bigkeys 而不加限流,等于主动制造一次慢查询风暴。它默认扫描全部 key,对千万级实例就是灾难。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 用
-i 0.001降低采样间隔(比如redis-cli -h 127.0.0.1 -p 6379 --bigkeys -i 0.001) - 避开业务高峰执行,最好在从节点上跑(主从延迟大的话,先
CONFIG SET slave-read-only yes确保只读) - 重点关注输出里
Biggest hash后面的数字:超过10000元素或10240字节(10KB)就标为高危 - 别信“只扫一次就够了”,BigKey 是动态产生的,要进 CI/CD 流水线定期扫描
淘汰策略选错会让 BigKey 问题雪上加霜
用 volatile-lru 或 volatile-ttl 并不能绕开 BigKey 卡顿,反而可能放大风险——因为它们只淘汰带 TTL 的 key,一旦漏设过期时间,BigKey 就永远钉在内存里,直到逼 Redis 启动 allkeys-* 兜底,这时才真正触发同步驱逐。
- 统一用
allkeys-lfu:按访问频次淘汰,天然保护热数据,且避免因 TTL 集中导致的雪崩式驱逐 - 把
maxmemory-samples从默认5提到10或15,降低采样偏差误杀热 key 的概率 - 禁用
volatile-ttl:它优先删马上过期的 key,容易引发整批失效,和 BigKey 驱逐叠加后更不可控 -
noeviction不是避坑方案,是放弃治疗——写入直接报(error) OOM command not allowed when used memory > 'maxmemory'
集群模式下 BigKey 还会引发数据倾斜,淘汰压力全压在单个节点
Redis Cluster 按 slot 分片,但一个 BigKey(比如 50MB 的 string)只能落在一个 slot、一个节点上。这个节点的内存、CPU、网络带宽都会成为瓶颈,而淘汰逻辑仍发生在本地,不会分摊。
- 用
CLUSTER KEYSLOT keyname查 BigKey 落在哪 slot,再用CLUSTER NODES确认归属节点 - 如果发现某节点
used_memory_human明显高于其他节点(比如超均值 2 倍),大概率是 BigKey 导致的数据倾斜 - 拆分策略要匹配访问模式:比如大
hash按 field 前缀分片成多个小hash,而不是强行转成 string 序列化 - 别依赖客户端分片库自动处理 BigKey——多数 SDK 对
HGETALL或LRANGE这类操作无感知,照样发大请求
真正难的不是发现 BigKey,而是在业务代码里拦截它的生成。监控 evicted_keys 和 expired_keys 增速只是事后补救,源头约束(比如 SDK 层限制单 value 不超 1MB、集合元素不超 2000)才是防卡死的第一道墙。

















