讲师中心 微信公众号
AI工具推荐 视频效率加速

Redis持久化与Redis缓存淘汰策略协作_清理过期数据优化存储

风墨君_4489

风墨君_4489

发布时间:2026-05-19 16:30:44

|

286人浏览过

|

来源于php中文网

原创

Redis过期键通过惰性删除和定期删除双机制清理:访问时惰性检查,后台线程每秒默认10次随机抽查20个键,超25%过期则重试,但不保证即时全覆盖。

redis持久化与redis缓存淘汰策略协作_清理过期数据优化存储

Redis过期键什么时候真正被删除?

Redis不会在键过期的瞬间立即释放内存,而是采用“惰性删除 + 定期删除”双机制。这意味着你看到 TTL 返回 0 或负数,不等于该键已从内存中消失;它可能还躺在数据库里,只是下次访问时才会被惰性检查并清除。

定期删除由后台线程执行,默认每秒运行 10 次(hz 配置项),每次随机抽查 20 个带过期时间的键。若其中超过 25% 已过期,就再抽一轮——但这个过程不保证全覆盖,尤其在大量键集中过期时,容易堆积“逻辑过期但物理未删”的脏数据。

  • 高并发场景下,依赖惰性删除会导致内存持续虚高,甚至触发 maxmemory 限制后提前淘汰健康数据
  • redis.conf 中的 hz 值可调(建议 10–100),但过高会增加 CPU 占用,过低则延迟清理
  • 用 INFO keyspace 查看各 db 的 expires 数量,比 DBSIZE 更能反映真实压力

RDB 和 AOF 如何对待过期键?

RDB 快照生成时,只会保存当时未过期的键;AOF 重写(bgrewriteaof)也会过滤掉已过期、尚未被删除的键。所以两者本身不保留过期键,但它们无法解决“正在运行中却长期滞留的过期键”问题——因为这些键还没被惰性或定期删除机制触达。

特别注意:如果关闭了持久化(save "" 且 appendonly no),过期键只靠运行时机制清理,风险更高;而开启 AOF 后,每个 EXPIRE 操作都会追加命令,但过期本身不产生 AOF 记录。

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
  • RDB 文件体积更干净,但恢复时无法还原“刚刚过期但尚未清理”的中间态
  • AOF 重写时会执行一次全量键扫描,相当于强制触发一次清理,可作为辅助手段
  • 不要依赖持久化文件来判断键是否还存在——运行时状态和磁盘文件永远存在时间差

缓存淘汰策略(maxmemory-policy)会优先踢过期键吗?

不会。Redis 的淘汰策略(如 allkeys-lru、volatile-lfu)在触发时,只考虑当前内存中的键,**完全无视其是否已过期**。也就是说,一个已经过期但尚未被惰性/定期删除机制清理的键,仍会参与淘汰计算,甚至可能挤占真正活跃数据的空间。

唯一与过期相关的策略是 volatile-ttl,它只在设置了过期时间的键中选 TTL 最小的淘汰——但它不区分“已过期”和“快过期”,而且要求键必须有 EXPIRE 或 PEXPIRE 设置,否则直接跳过。

  • 用 volatile-* 策略的前提是:所有缓存键都显式设置了过期时间,否则可能因无候选键导致写入失败(OOM command not allowed when used memory > 'maxmemory')
  • noeviction 下,过期键不清除 + 内存满 = 新写入直接报错,这是最危险的配置组合
  • 监控 evicted_keys 和 expired_keys 两个指标,若后者远小于前者,说明过期清理严重滞后

如何让过期清理更及时、更可控?

没有银弹,但可以分层干预:对关键业务键,主动控制生命周期;对批量数据,避免 TTL 集中设置;对运维侧,用配置+监控形成闭环。

  • 用 SCAN 配合 TTL 手动清理(例如:每天凌晨扫 SCAN 0 MATCH "cache:*" COUNT 1000,对 TTL 返回 -1 的键执行 DEL),适合冷数据归档场景
  • 客户端写入时,用 SET key value EX 3600 NX 替代分开的 SET + EXPIRE,避免中间状态残留
  • 升级到 Redis 7.0+ 后,可启用 active-defrag-ignore-bytes 和 active-defrag-threshold-lower,让内存碎片整理顺便捎带过期键清理
  • 警惕 KEYS * 类全量扫描命令——它会阻塞定期删除线程,进一步恶化过期堆积

真正难处理的不是单个过期键,而是“大量键在同一秒过期 + 客户端高频访问 + 淘汰策略又没兜住”的三角叠加。这种时候,定期删除线程跑不过来,惰性删除来不及触发,淘汰策略又挑不到合适目标——内存就卡在那里不动了。

热门AI工具

更多
超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

相关专题

更多
常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4509

2023.11.02

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4035

2023.11.14

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7492

2024.04.02

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

643

2024.04.07

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

756

2024.04.07

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

7362

2024.04.07

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1160

2024.04.07

redis的8种数据类型有哪些
redis的8种数据类型有哪些

redis 提供 8 种数据类型:字符串(文本、数字、二进制)、哈希(键值对)、列表(有序集合)、集合(无序唯一元素)、有序集合(按分数排序)、地理空间(地理位置)、hyperloglog(估计大数据基数)和位图(位序列存储)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1096

2024.04.07

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

20

2026.10.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn