淘汰释放也能异步
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 行为趋同 |
是否开启要按实例实测权衡:内存余量小的实例开得越早,峰值越容易顶到上限。
异步释放期间内存仍被占用,容量判断别被「已经淘汰了」误导,估算峰值时要把滞后释放的量算进去。