用户删除的异步释放开关
大键的删除成本集中在释放内存:同步释放会阻塞主线程,键越大阻塞越久。lazyfree-lazy-user-del 让 DEL 默认走异步释放(行为等同 UNLINK),lazyfree-lazy-user-flush 让清库命令默认异步执行。它们改变的是所有人调用 DEL 与清库命令时的默认语义,属于影响面很大的全局开关。
基本信息
| user-del | lazyfree-lazy-user-del yes 使 DEL 异步释放 |
|---|---|
| user-flush | lazyfree-lazy-user-flush yes 使清库默认异步 |
| 替代手段 | 显式使用 UNLINK,清库使用带异步选项的变体 |
| 相关开关 | 另有针对过期、淘汰与内部删除的异步选项 |
| 语义变化 | 命令立即返回,内存随后逐步释放 |
同步与异步释放对比
| 方式 | 行为 | 适用判断 |
|---|---|---|
| 同步释放 | 命令返回时内存已归还 | 键小、对时序有严格要求的场景 |
| 异步释放 | 命令立即返回,后台线程回收内存 | 大键删除与清库,可以接受延迟 |
| 过期与淘汰触发的删除 | 同样可配置为异步 | 大批量集中删除时收益明显 |
| 内部删除(旧值覆盖等) | 由内部删除类开关控制 | 写入模式频繁覆盖大值时值得评估 |
查看与调整
查看与调整
redis-cli CONFIG GET lazyfree-lazy-user-del
redis-cli CONFIG SET lazyfree-lazy-user-del yes # DEL 默认异步,影响所有调用方
redis-cli CONFIG SET lazyfree-lazy-user-flush yes
redis-cli UNLINK big:key # 更推荐:显式异步删除
redis-cli INFO memory | grep lazyfree # 看待释放对象数,观察回收进度典型使用场景
- 删除大键:避免同步释放造成的延迟尖刺
- 清库操作:维护窗口里希望命令快速返回
- 大批量集中过期:配合异步释放降低抖动
- 释放尖刺治理:排查删除操作引发的周期性延迟
- 开关变更评审:评估全局改动的连带影响
更推荐显式使用 UNLINK 与带异步选项的清库命令,精确控制影响范围;全局开关会让所有调用方(包括没预期的脚本)行为一起变化。
异步释放期间内存不会立刻下降,used_memory 居高不下属于正常现象,不要因此重复执行删除或重启实例。