Redis 过期策略核心就是当 key 过期后Redis 怎么删除它既不占内存又不影响性能。Redis 一共用了3 种过期策略其中2 种是被动/主动删除1 种是内存兜底淘汰组合使用保证高效和稳定。一、3 种基础过期策略理论先搞懂三种纯理论策略Redis 不是单独用某一种而是组合使用。1. 定时删除不推荐做法创建 key 时同时创建一个定时器到期立刻删除。优点内存最干净过期 key 马上清理。缺点大量过期 key 时CPU 压力极大影响 Redis 性能。Redis 不用太耗 CPU。2. 惰性删除Redis 必用做法你不查我我就不删。只有当你访问这个 key 时Redis 才检查是否过期过期就删除。优点完全不占用额外 CPU。缺点如果过期 key 一直没人访问会常驻内存造成内存浪费。Redis 使用作为基础策略。3. 定期删除Redis 必用做法Redis 每隔一段时间默认 100ms随机抽查一部分 key检查过期就删除。配置hz 10→ 每秒执行 10 次即每 100ms 一次。优点平衡 CPU 和内存不会一直忙也不会让过期 key 堆积太多。缺点随机抽查无法保证所有过期 key 都被清理。Redis 使用配合惰性删除一起用。二、Redis 实际使用的组合策略Redis 官方 惰性删除 定期删除工作流程你访问一个 key → 先检查是否过期 → 过期惰性删除。后台每隔 100ms → 随机抽取一批 key 检查 → 过期定期删除。两种策略配合既省 CPU又尽量清理过期 key。三、内存淘汰机制兜底保障如果惰性 定期删除都没清理干净内存快满了怎么办Redis 会启动内存淘汰策略强制清理 key 腾出空间。8 种内存淘汰策略Redis 6.x分为不淘汰、淘汰过期 key、淘汰所有 key三类1. 不淘汰默认noeviction内存满了新写入直接报错不删除任何 key。2. 只淘汰设置了过期时间的 keyvolatile-lru淘汰最近最少使用的过期 key最常用volatile-lfu淘汰使用频率最少的过期 keyvolatile-random随机淘汰过期 keyvolatile-ttl淘汰最快过期的 key3. 淘汰所有 key不管有没有过期allkeys-lru淘汰所有 key 中最近最少使用的生产极常用allkeys-lfu淘汰所有 key 中使用频率最少的allkeys-random随机淘汰所有 key四、高频面试题答案直接背1. Redis 过期删除策略是什么惰性删除 定期删除。访问时检查删除惰性。后台定期随机抽查删除定期。2. 为什么不用定时删除太耗 CPU大量定时器会严重拖慢 Redis 性能。3. 惰性删除 定期删除有漏洞吗有如果大量过期 key 既没被访问又没被定期抽查到会堆积内存。→ 解决方案内存淘汰机制兜底。4. 生产环境推荐用什么淘汰策略缓存场景allkeys-lru优先淘汰最少使用的命中率最高有重要数据不能乱删volatile-lru只淘汰带过期时间的五、一句话总结惰性删除你查我我才删。定期删除我抽空随机删。内存淘汰内存满了强制删。总结Redis 过期清理 惰性删除 定期删除内存满了兜底 8 种内存淘汰策略生产首选allkeys-lru缓存专用
Redis Key过期删除策略
Redis 过期策略核心就是当 key 过期后Redis 怎么删除它既不占内存又不影响性能。Redis 一共用了3 种过期策略其中2 种是被动/主动删除1 种是内存兜底淘汰组合使用保证高效和稳定。一、3 种基础过期策略理论先搞懂三种纯理论策略Redis 不是单独用某一种而是组合使用。1. 定时删除不推荐做法创建 key 时同时创建一个定时器到期立刻删除。优点内存最干净过期 key 马上清理。缺点大量过期 key 时CPU 压力极大影响 Redis 性能。Redis 不用太耗 CPU。2. 惰性删除Redis 必用做法你不查我我就不删。只有当你访问这个 key 时Redis 才检查是否过期过期就删除。优点完全不占用额外 CPU。缺点如果过期 key 一直没人访问会常驻内存造成内存浪费。Redis 使用作为基础策略。3. 定期删除Redis 必用做法Redis 每隔一段时间默认 100ms随机抽查一部分 key检查过期就删除。配置hz 10→ 每秒执行 10 次即每 100ms 一次。优点平衡 CPU 和内存不会一直忙也不会让过期 key 堆积太多。缺点随机抽查无法保证所有过期 key 都被清理。Redis 使用配合惰性删除一起用。二、Redis 实际使用的组合策略Redis 官方 惰性删除 定期删除工作流程你访问一个 key → 先检查是否过期 → 过期惰性删除。后台每隔 100ms → 随机抽取一批 key 检查 → 过期定期删除。两种策略配合既省 CPU又尽量清理过期 key。三、内存淘汰机制兜底保障如果惰性 定期删除都没清理干净内存快满了怎么办Redis 会启动内存淘汰策略强制清理 key 腾出空间。8 种内存淘汰策略Redis 6.x分为不淘汰、淘汰过期 key、淘汰所有 key三类1. 不淘汰默认noeviction内存满了新写入直接报错不删除任何 key。2. 只淘汰设置了过期时间的 keyvolatile-lru淘汰最近最少使用的过期 key最常用volatile-lfu淘汰使用频率最少的过期 keyvolatile-random随机淘汰过期 keyvolatile-ttl淘汰最快过期的 key3. 淘汰所有 key不管有没有过期allkeys-lru淘汰所有 key 中最近最少使用的生产极常用allkeys-lfu淘汰所有 key 中使用频率最少的allkeys-random随机淘汰所有 key四、高频面试题答案直接背1. Redis 过期删除策略是什么惰性删除 定期删除。访问时检查删除惰性。后台定期随机抽查删除定期。2. 为什么不用定时删除太耗 CPU大量定时器会严重拖慢 Redis 性能。3. 惰性删除 定期删除有漏洞吗有如果大量过期 key 既没被访问又没被定期抽查到会堆积内存。→ 解决方案内存淘汰机制兜底。4. 生产环境推荐用什么淘汰策略缓存场景allkeys-lru优先淘汰最少使用的命中率最高有重要数据不能乱删volatile-lru只淘汰带过期时间的五、一句话总结惰性删除你查我我才删。定期删除我抽空随机删。内存淘汰内存满了强制删。总结Redis 过期清理 惰性删除 定期删除内存满了兜底 8 种内存淘汰策略生产首选allkeys-lru缓存专用