首页/数据/Redis 进阶速查/lazyfree-lazy-eviction:淘汰也异步
内存与管理99 条

lazyfree-lazy-eviction:淘汰也异步

lazyfree-lazy-eviction yes 让淘汰动作异步释放内存,降低淘汰瞬间的阻塞,但释放会略滞后于淘汰决策。

Redis 进阶速查数据更新于 2026-10-13

淘汰释放也能异步

lazyfree-lazy-eviction 设为 yes 后,因内存超限而被淘汰的键,其内存释放交给后台线程异步完成,淘汰决策本身仍在主线程即时生效。这能明显降低大批量淘汰瞬间的主线程阻塞,代价是内存回落滞后于淘汰动作的时间点,进程峰值内存可能来得更晚。lazyfree 是一组开关,另有针对过期键、服务端内部删除与用户 DEL 的对应项。

基本信息

配置项lazyfree-lazy-eviction
默认值no
执行方式后台线程(bio)完成释放
生效范围淘汰路径,不含普通删除
相关开关lazyfree-lazy-expire、lazyfree-lazy-server-del、lazyfree-lazy-user-del
观测指标evicted_keys 与 used_memory 回落节奏
修改方式CONFIG SET 即时生效,重启回配置文件

典型使用场景

  • 实例淘汰频繁且出现延迟尖峰,怀疑是释放大键造成的阻塞
  • 内存水位贴近上限,希望降低淘汰瞬间的主线程停顿
  • 缓存全量刷新窗口内,大量键同时被淘汰的批处理场景
  • 排查淘汰发生后内存迟迟不回落,判断是否异步释放所致
  • 为降低延迟抖动做参数基线,逐项验证 lazyfree 开关收益
  • 与 UNLINK、FLUSHALL ASYNC 一起规划,形成统一的异步释放策略

开关与观测

开关与观测
redis-cli CONFIG GET lazyfree-lazy-eviction       # 当前开关状态
redis-cli CONFIG SET lazyfree-lazy-eviction yes    # 开启淘汰异步释放
redis-cli CONFIG GET lazyfree-*                    # 一次看清全部 lazyfree 项
redis-cli INFO stats | grep -E 'evicted_keys'      # 淘汰是否活跃
redis-cli INFO memory | grep -E 'used_memory:'     # 观察回落节奏
redis-cli CONFIG SET lazyfree-lazy-eviction no     # 无收益时回退

lazyfree 各开关

开关作用路径注意
lazyfree-lazy-eviction内存超限淘汰时的释放峰值内存出现时间后移
lazyfree-lazy-expire过期键删除时的释放过期风暴场景效果明显
lazyfree-lazy-server-del服务端内部删除影响覆盖写等隐式删除
lazyfree-lazy-user-del用户执行 DEL 时开启后 UNLINK 与 DEL 行为趋同
是否开启要按实例实测权衡:内存余量小的实例开得越早,峰值越容易顶到上限。
异步释放期间内存仍被占用,容量判断别被「已经淘汰了」误导,估算峰值时要把滞后释放的量算进去。

易错点

  • 内存余量本来就小还先开异步释放,峰值内存更接近上限甚至触发 OOM
  • 把异步释放理解成「瞬间释放」,容量告警的水位判断随之失准
  • 在副本上随意调整此类参数而不核对主从配置一致性,问题难以复现
  • 运行期改完没有写回配置文件,重启后行为悄悄回退
  • 只开开关不看 evicted_keys 与延迟曲线,无法证明收益

数据来源与参考

  • Redis 官方文档:lazyfree 各开关说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌