一句话先讲结论
RDB 做“快速备份 + 快速恢复”,AOF 做“实时防丢 + 可读日志”;两者混合 = 既快又稳,鱼和熊掌兼得。
1️⃣ 各自优势对比
| 维度 | RDB (快照) | AOF (追加日志) |
|---|---|---|
| 数据丢失量 | 生成快照那一瞬间之后的数据会丢 | 默认 1 秒最多丢 1 条 |
| 文件体积 | 二进制压缩,体积小 | 文本累积,体积大 |
| 恢复速度 | 直接 mmap 载入,秒级 | 逐条重放命令,分钟级 |
| 磁盘 I/O | 一次性写盘,I/O 峰值大 | 每秒追加写,I/O 平滑 |
| 可读性 | 二进制不可读 | 纯文本可审计 |
| 生成耗时 | fork 子进程,可能阻塞 | 追加几乎无阻塞 |
2️⃣ 为什么要“混合” (RDB-AOF mixed)
Redis 4.0 引入 RDB-AOF mixed mode,把两者的优点缝在一起:
- AOF 文件头部放一份 RDB 快照 → 重启时先秒级恢复 RDB 部分,再重放 RDB 之后的增量 AOF 命令。
- 尾部继续以 AOF 追加 → 保证实时性。
- 重写时生成新的 RDB + 新的增量 AOF → 既缩小 AOF 体积,又保持“秒级恢复 + 秒级防丢”。
3️⃣ 实战配置 & 效果
# redis.conf
save 900 1 # RDB 900 秒内 1 次修改就快照
appendonly yes # 打开 AOF
aof-use-rdb-preamble yes # 开启混合模式
appendfsync everysec # 每秒刷盘,丢最多 1 秒效果数据(4 GB 内存实例)
• 纯 AOF 恢复:~8 分钟
• 纯 RDB 恢复:~30 秒,但可能丢 5 分钟数据
• 混合模式:~40 秒恢复,仅丢 1 秒数据,文件体积比纯 AOF 小 60%
4️⃣ 面试一句话背诵
“RDB 快照恢复快、体积小,AOF 日志实时性强,混合模式把 RDB 做头、AOF 做尾,重启先秒级加载快照再重放增量,既快又稳。”