深入理解 RDB · AOF · 混合持久化 三种机制的原理、配置与最佳实践
内存数据库的命脉,灾难恢复的保障
核心问题:Redis 是纯内存数据库,服务重启或宕机后内存数据会 全部丢失。持久化机制就是将内存数据写入磁盘,使 Redis 具备数据恢复能力。
在某个时间点对 Redis 数据库做全量快照,将内存中的数据以二进制压缩格式保存到 .rdb 文件。
将每个写命令以文本格式追加记录到 .aof 文件,恢复时重放全部命令。
Redis 4.0+ 新特性,在 AOF 重写时将 RDB 快照 + AOF 增量混合写入同一文件,兼顾两者优势。
三种模式 可共存:如果同时开启 RDB 和 AOF,Redis 重启时 优先使用 AOF 文件恢复(因为数据更完整)。只有当 AOF 不存在时才用 RDB。
Redis Database Backup,内存快照存档
RDB 在指定时间点对 Redis 内存做全量快照,以紧凑的二进制格式(经过 LZF 压缩)保存到磁盘 dump.rdb 文件中。
Copy-On-Write (COW) 机制:fork() 后父子进程共享内存页。主进程继续处理请求时若修改某页数据,OS 会复制该页给父进程独用。子进程始终遍历的是 fork 时刻的内存快照,不受后续写入干扰。
Append Only File,命令级别的持久化记录
Redis 每次执行写命令(SET / DEL / LPUSH...)后,将命令以 RESP 协议文本格式追加到 appendonly.aof 文件末尾。数据恢复时逐条重放命令,还原内存状态。
每次写命令立即 fsync 到磁盘。
数据零丢失,但性能最差,每秒写入受 I/O 限制(约几百次/秒)。
后台线程每秒执行一次 fsync。
宕机最多丢失 1 秒 数据,性能与安全的最佳平衡点。
由 OS 决定何时刷盘(通常 30s)。
性能最好,但宕机可能丢失数十秒数据,不推荐生产使用。
问题:AOF 文件只追加不删除,同一个 Key 被多次修改会产生大量冗余命令,文件越来越大。
例如:SET k 1 → SET k 2 → SET k 3,AOF 有 3 条命令,但实际只需 SET k 3 即可。
鱼与熊掌兼得:RDB 的快速恢复 + AOF 的数据安全
设计目标:解决 AOF 重写文件仍然很大、恢复慢的问题,同时保留 AOF 的低数据丢失特性。混合持久化是目前 Redis 官方推荐的生产配置。
多维度全面分析,快速选型参考
| 对比维度 | 💾 RDB | 📝 AOF | ⚡ 混合持久化 |
|---|---|---|---|
| 持久化方式 | 全量内存快照 | 写命令追加日志 | RDB快照 + AOF增量 |
| 数据安全性 | 较低 最多丢失几分钟 | 高 最多丢失 1s | 高 最多丢失 1s |
| 恢复速度 | 极快 直接加载二进制 | 慢 逐条重放命令 | 快 近似 RDB 速度 |
| 文件大小 | 小 压缩二进制 | 大 文本格式冗余 | 中 比纯 AOF 小很多 |
| 写入性能影响 | 小 定时快照,影响低 | 中 everysec 影响较低 | 中 同 AOF everysec |
| CPU 消耗 | fork + 压缩,偶发高峰 | 持续写入,总量大 | 重写时较高,日常同 AOF |
| 可读性 | 不可读 二进制格式 | 可读 RESP 文本 | 尾部 AOF 部分可读 |
| 适用版本 | 所有版本 | 所有版本 | Redis 4.0+ |
| 推荐场景 | 冷备、迁移、允许少量丢失 | 高安全要求、可人工修复 | 生产环境首选 |
点击按钮,模拟三种持久化机制的执行过程
模拟 Redis 实例运行中,分别触发不同持久化模式的执行过程。观察日志输出了解各机制的工作步骤。
根据业务需求,快速确定最适合的持久化方案
数据不能丢失,同时需要快速灾难恢复。混合持久化同时满足安全性与恢复速度。
写入频繁,数据不能丢,需高可用。混合持久化 + everysec 是标准配置。
数据可以从 DB 重新生成,丢失部分数据可接受,重点是恢复快、性能高。
允许短暂数据不一致,对恢复速度要求高,RDB 即可满足需求。
消息不能丢失,但数据量大,需要人工可检查日志。纯 AOF 更易排查问题。
Session 丢失影响用户体验,需要高可用。混合持久化是最佳选择。
需要将某一时刻完整数据迁移到另一实例,RDB 的全量快照特性天然适合。
执行了错误的 FLUSHALL 或 DEL 操作,需要回滚数据,AOF 日志可以手动编辑恢复。
Redis 仅用作缓存层,所有数据都可从数据库重建,无需任何持久化。
生产环境最佳实践:开启 混合持久化(aof-use-rdb-preamble yes),同时保留 RDB 定时快照作为额外备份副本,放到不同存储介质或远程对象存储(OSS/S3)。这样既有高安全的实时 AOF,又有易迁移的 RDB 冷备。