news 2026/9/5 3:42:19

【Redis】【中篇】持久化与内存管理 —— RDB/AOF 底层原理及淘汰策略剖析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Redis】【中篇】持久化与内存管理 —— RDB/AOF 底层原理及淘汰策略剖析

继续我们的 Redis 内核探索之旅。本章我们不讲业务,只聊数据安全性内存韧性


📑 中篇目录

  • 提问六:Redis 的持久化机制底层原理和配置方式,RDB 持久化修改数据,是如何保证异步子进程数据冲突的

  • 提问七:Redis 过期策略有哪三种,为什么选择惰性删除和定期删除策略

  • 提问八:Redis 的内存淘汰策略和过期策略区别,有哪些策略


六、Redis 的持久化机制底层原理和配置方式,RDB 持久化修改数据,是如何保证异步子进程数据冲突的

Redis 提供了两种核心持久化机制:RDB(快照)AOF(日志),以及 4.0 版本引入的混合持久化

1. RDB(Redis DataBase)—— 全量快照

  • 原理:在触发条件(如save 900 1)满足时,主进程fork()一个子进程,由子进程将当前内存数据写入一个压缩的二进制 RDB 文件。

  • 配置

    conf

    save 900 1 save 300 10 save 60 10000 dbfilename dump.rdb rdbcompression yes

2. AOF(Append Only File)—— 写命令日志

  • 原理:将每一条写命令(如SETHSET)以文本格式追加到 AOF 文件末尾。

  • 核心同步策略appendfsync):

    • always:每次写入都刷盘(最安全,最慢)。

    • everysec:每秒刷盘一次(推荐,最多丢 1 秒数据)。

    • no:交由操作系统调度(最快,但可能丢大量数据)。

  • AOF 重写:当 AOF 文件膨胀时,触发后台重写(bgrewriteaof)瘦身。

3. 混合持久化(Redis 4.0+)

配置aof-use-rdb-preamble yes。AOF 重写时,文件头部直接写入 RDB 格式的快照,尾部追加增量 AOF 日志,重启时恢复速度极快。

4. 如何保证异步子进程数据不冲突?(写时复制 COW)

这是最精妙的设计:执行bgsavebgrewriteaof时,主进程fork()子进程,父子进程共享同一份物理内存页表。

  • 父进程继续处理写入请求。

  • 当父进程要修改某个内存页时,操作系统触发写时复制(Copy-On-Write),将该页物理内存复制一份副本给父进程修改。

  • 子进程从头到尾读取的都是fork()那一刻的旧内存页快照。两者互不干扰,完美解决数据冲突!


七、Redis 过期策略有哪三种,为什么选择惰性删除和定期删除策略

理论上的三种删除策略

  1. 定时删除:Key 过期立即创建定时器删除。对 CPU 极不友好,被 Redis 抛弃。

  2. 惰性删除:访问 Key 时才检查是否过期,过期则删除。对 CPU 友好,对内存不友好(过期但永不访问的 Key 会常驻内存)。

  3. 定期删除:每隔 100ms(由hz参数控制)随机抽取一批设置了 TTL 的 Key 检查删除。折中方案

Redis 最终选择:惰性删除(守门员)+ 定期删除(巡逻队)

这是一种CPU 与内存的务实权衡

  • 惰性删除保证 CPU 绝对不被额外消耗。

  • 定期删除(默认每秒 10 次,每次抽 20 个 Key,删除超过 5 个则继续循环,但总耗时不超过 25ms)防止内存被过期 Key 撑爆。

  • 两者结合,确保系统在面对千万级 Key 时依然稳定高效。


八、Redis 的内存淘汰策略和过期策略区别,有哪些策略

核心区别(面试高频陷阱)

  • 过期策略(Expiration):处理TTL 到达 0的 Key,是主动清理“垃圾”。

  • 淘汰策略(Eviction):处理内存达到maxmemory上限时的窘境,无论 Key 是否过期,强制“扔东西”腾空间。

Redis 的 8 种内存淘汰策略

分类策略名称行为
默认noeviction拒绝写入,返回错误(默认策略)
全键(Allkeys)allkeys-lru淘汰最近最少使用的 Key(最推荐
全键allkeys-lfu淘汰访问频率最低的 Key(4.0+,更精准)
全键allkeys-random随机淘汰
过期键(Volatile)volatile-lru只在有 TTL 的 Key 中淘汰 LRU
过期键volatile-lfu只在有 TTL 的 Key 中淘汰 LFU
过期键volatile-random只在有 TTL 的 Key 中随机淘汰
过期键volatile-ttl淘汰剩余生存时间最短的 Key

调优参数maxmemory-samples 5(默认采样 5 个,调高至 10 可提升淘汰精准度,但稍耗 CPU)。


💎 中篇总结与预告

中篇我们剥开了持久化的外衣,看到了fork()与写时复制的操作系统级魔法,也理清了过期与淘汰的本质区别。下篇(终章),我们将直面缓存架构师的终极考验:五种数据类型的场景博弈、分布式锁的 Redisson 底层原理、排行榜算法,以及如何用布隆过滤器、互斥锁、熔断降级彻底干掉缓存三大杀手(穿透、击穿、雪崩)。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/5 3:40:45

STM32C5开发LSM6DSV320X(2)----中断获取陀螺仪数据

STM32C5开发LSM6DSV320X .2--轮询获取陀螺仪数据概述视频教学样品申请源码下载硬件准备参考程序串口配置IIC配置CS和SA0设置INT设置生成项目导入STM32CubeIDE设置工程编码添加头文件printf 重定向参考程序CMake设置头文件设置初始换管脚获取ID复位传感器BDU设置配置输出数据率与…

作者头像 李华
网站建设 2026/9/5 3:37:38

班级优化大师教师使用指南:从建班到课堂点评与家校同步

班级优化大师是一款面向 K12的课堂管理工具,覆盖课堂点评、随机点名、家校沟通等功能。这篇文章整理教师从建班到日常使用的完整流程。 一、下载与注册 官网地址:班级优化大师官网,支持手机(Android/iOS)、电脑、网…

作者头像 李华
网站建设 2026/9/5 3:36:45

Windows窗口群控技术:基于API钩子实现多窗口同步操作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/5 3:36:41

教育学专业文献综述怎么写?2026 年 AI 生成文献综述的正确打开方式

笔乐颂 AI 官网入口: https://www.blsxueshu.com 教育学的文献综述有学科特殊性:理论流派多、政策文献重、国内外研究差异大,还要在梳理之后写出「述评」指出研究缺口。很多教育学研究生的综述被导师批「像文献清单,没有自己的判…

作者头像 李华
网站建设 2026/9/5 3:35:35

一篇看懂PMP:是什么、有什么用、谁适合考、难不难

很多职场人都觉得国内职称评审流程繁琐、周期长、答辩难度大,耗费大量时间精力却未必能顺利通过。 给大家带来一个杭州职场人的重磅利好政策:2026年下半年度,杭州市制造业领域国际职业资格比照认定职称政策更新,PMP项目管理专业人…

作者头像 李华