首页/数据/Redis 进阶速查/lazyfree:把删除挪到后台线程
内存与管理99 条

lazyfree:把删除挪到后台线程

lazyfree 系列配置把大对象释放工作交给后台线程执行,避免主线程删除大键时长时间阻塞,是延迟敏感实例的常用开关。

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

把释放工作挪到后台

删除一个大键时,释放它占用的内存可能非常耗时,主线程被卡住就表现为请求超时甚至连接超时。惰性释放把这项工作交给后台线程:主线程只负责把键从键空间里摘掉,内存回收在后台慢慢完成。相关开关覆盖淘汰、过期、内部删除、用户删除与清空库几条不同的触发路径,也可以直接用异步删除命令让某一次操作单独生效。

基本信息

解决对象大键删除引起的主线程阻塞
机制主线程摘除键,后台线程回收内存
开关族淘汰、过期、内部删除、用户删除、清空库
单次使用异步删除命令可在单次操作上生效
观察影响内存回收存在延迟,指标会滞后

典型使用场景

  • 延迟敏感业务出现周期性超时,定位到删除大键导致的阻塞
  • 清空大实例的数据前评估是否需要异步方式,避免长时间卡顿
  • 大批量键过期时出现的延迟毛刺,通过异步过期缓解
  • 扩容或清理时删除容量很大的集合类型键
  • 排查开启后内存为什么没有立刻下降,确认回收流程

查看与调整

查看与调整
redis-cli CONFIG GET lazyfree-*                      # 查看全部相关开关
redis-cli CONFIG SET lazyfree-lazy-user-del yes      # 用户删除走后台回收
redis-cli CONFIG SET lazyfree-lazy-eviction yes      # 淘汰时也使用异步释放
redis-cli UNLINK bigkey                              # 单次异步删除
redis-cli INFO memory | grep used_memory             # 观察回收前后的变化

开关与触发场景

开关触发场景说明
淘汰类内存达到上限触发淘汰避免淘汰大键时卡顿
过期类键过期被清理大批键集中过期时尤其有用
内部删除实例自身的删除动作常与内部维护操作相关
用户删除客户端发起的删除命令日常删除大键主要依赖它
清空库清空整个数据库大规模清理时收益最明显
开启之后内存回收是异步的,指标会出现滞后,短时间内看不到内存下降属于预期行为,不必急着怀疑配置没生效。
后台回收线程排队时,内存峰值仍可能顶到上限并触发额外淘汰,释放任务积压的场景要关注整体内存余量。

易错点

  • 开启后立刻查内存没有下降就怀疑失效,忽略了异步回收本来就存在延迟
  • 只开启用户删除开关,淘汰与过期路径仍然同步释放,延迟毛刺照旧出现
  • 大批量删除在高峰执行,后台回收排队,内存峰值反而先顶到上限
  • 把惰性释放当成万能方案,忽略了真正的问题是键设计过大

数据来源与参考

  • Redis 官方文档:lazy freeing 说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌