首页/数据/Redis 进阶速查/过期回收与内存释放节奏
内存与管理99 条

过期回收与内存释放节奏

过期键内存释放由被动访问触发与主动抽样两种路径完成;抽样比例(如 hz 与 ACTIVE_EXPIRE 相关配置)决定回收及时性。

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

过期键的回收节奏

过期键的内存释放有两条路径:被动删除发生在客户端访问到该键时,发现已过期就立即删除;主动删除由定时任务周期性抽样检查并清理。定时任务的执行频率受 hz 控制(默认 10),开启 dynamic-hz 后 Redis 会在连接数较多时自动提高频率。如果过期键很多而回收跟不上,内存与 CPU 都会被持续占用,典型现象是「数据按 TTL 早该过期了,内存却迟迟不降」。

基本信息

被动路径访问时发现过期即删
主动路径周期抽样扫描删除
定时频率hz,默认 10
动态调整dynamic-hz 默认开启
回收统计INFO stats 的 expired_keys
库级视图INFO keyspace 的 expires 与 avg_ttl
力度参数active-expire-effort(支持版本可调)

典型使用场景

  • 内存回落缓慢,确认过期键是否堆积未被及时清理
  • 集中设置同一时间点过期,评估过期潮对 CPU 的冲击
  • 排查「键明明过期还占着内存」的疑问,理解两条删除路径
  • 为缓存设计 TTL 时加入随机抖动,分散过期压力
  • 调整定时任务节奏前,评估对整体延迟与吞吐的影响
  • 核对 keyspace 的过期键数量占比,识别过期策略设计问题

查看与调整

查看与调整
redis-cli INFO stats | grep -E 'expired_keys'   # 累计过期回收量
redis-cli INFO keyspace                        # 各库键数、过期键数与平均 TTL
redis-cli CONFIG GET hz                        # 定时任务频率
redis-cli CONFIG GET dynamic-hz                # 是否动态调整
redis-cli CONFIG GET active-expire-effort      # 主动过期努力程度
redis-cli INFO cpu                             # 过期回收对 CPU 的影响

两条回收路径对照

路径触发条件特点
被动删除客户端访问该键及时但依赖访问
主动删除定时任务周期抽样覆盖冷键,消耗 CPU
集中过期大量键同一时刻到期瞬间压力集中,需抖动分散
过期键多但内存回落慢时,先确认主动抽样是否被高负载拖慢,而不是急着做全库扫描。
TTL 上加随机抖动是把过期潮摊平的最简单手段:同一批缓存错开几十秒到几分钟,CPU 曲线会平滑很多。

易错点

  • 集中设置同一过期时间,过期潮推高瞬时 CPU 与回收压力
  • 误以为设置了 TTL 内存就会立刻释放,容量判断偏乐观
  • 随意修改 hz 参数,整体定时任务节奏被改变
  • 只关注过期键数量不关注过期速率,问题演变成周期性尖峰才被发现
  • 大键带 TTL 集中到期,单次删除本身就成为阻塞源

数据来源与参考

  • Redis 官方文档:过期删除策略
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌