如何高效利用Redis的定期与惰性删除机制快速清除过期Key?

2026-05-07 15:570阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计848个文字,预计阅读时间需要4分钟。

如何高效利用Redis的定期与惰性删除机制快速清除过期Key?

由于立即删除在工程上不可行——并不是做不到,而是代价太高。如果每个key都配置一个定时器(例如调用setTimer),当有百万级key同时设置了EXPIRE,Redis主线程会被大量定时器回调压榨;修改过期时间还需要重置定时器,进一步加剧压力。延迟队列方案也类似:

GETEXISTS 时触发的惰性删除怎么工作

这是最轻量的“补刀”动作:每次执行读命令前,Redis 会检查目标 key 是否在 db->expires 字典中登记了过期时间,且当前时间已超过该时间戳。一旦确认过期,就当场调用 dbDelete() 删除它,并返回 (nil)

  • 只影响本次访问的那一个 key,不扫描其他数据
  • 从不主动触发,所以冷数据(比如长期不用的验证码)可能永远留在内存里
  • 主从复制下,从节点不会自己惰性删除——它依赖主节点发来的 DEL 命令同步删除

定期删除任务 activeExpireCycle() 怎么控制开销

这个函数藏在 serverCron() 里,默认每秒跑 10 次(由配置项 hz 控制)。

阅读全文
标签:Redisred

本文共计848个文字,预计阅读时间需要4分钟。

如何高效利用Redis的定期与惰性删除机制快速清除过期Key?

由于立即删除在工程上不可行——并不是做不到,而是代价太高。如果每个key都配置一个定时器(例如调用setTimer),当有百万级key同时设置了EXPIRE,Redis主线程会被大量定时器回调压榨;修改过期时间还需要重置定时器,进一步加剧压力。延迟队列方案也类似:

GETEXISTS 时触发的惰性删除怎么工作

这是最轻量的“补刀”动作:每次执行读命令前,Redis 会检查目标 key 是否在 db->expires 字典中登记了过期时间,且当前时间已超过该时间戳。一旦确认过期,就当场调用 dbDelete() 删除它,并返回 (nil)

  • 只影响本次访问的那一个 key,不扫描其他数据
  • 从不主动触发,所以冷数据(比如长期不用的验证码)可能永远留在内存里
  • 主从复制下,从节点不会自己惰性删除——它依赖主节点发来的 DEL 命令同步删除

定期删除任务 activeExpireCycle() 怎么控制开销

这个函数藏在 serverCron() 里,默认每秒跑 10 次(由配置项 hz 控制)。

阅读全文
标签:Redisred