混合持久化是什么
aof-use-rdb-preamble 让 AOF 重写后的文件以 RDB 格式打底,之后追加写命令:重启加载时先读紧凑的 RDB 部分,再重放少量增量命令,因此加载更快、文件更小。Redis 5.0 起默认开启;7.0 之后 AOF 改为多文件结构,base 与 incr 文件本身就体现了这种混合思路。
基本信息
| 适用 | Redis 4.0 引入,5.0 起默认 yes |
|---|---|
| yes 语义 | 重写后 base 为 RDB 二进制格式,其后追加命令 |
| no 语义 | 全文本命令格式,兼容旧版本但加载慢 |
| 7.0+ 结构 | appendonlydir 目录下 base.rdb、incr.aof 与 manifest 清单 |
查看与校验
查看与校验
CONFIG GET aof-use-rdb-preamble # 返回 yes 表示混合模式
CONFIG GET appenddirname # 7.0+ AOF 目录名,常见为 appendonlydir
ls -l /data/redis/appendonlydir/ # base.rdb、incr.aof 与 manifest 清单文件
redis-check-rdb /data/redis/appendonlydir/appendonly.aof.1.base.rdb # 校验 base 文件完整性
redis-check-aof --fix /data/redis/appendonlydir/appendonly.aof.1.incr.aof # 只修复增量部分
INFO persistence | grep -E 'aof_enabled|aof_last_bgrewrite_status' # 持久化状态与最近重写结果文件与取值读法
| 对象 | 含义 | 注意 |
|---|---|---|
| aof-use-rdb-preamble=yes | base 为 RDB 二进制 | 不能用文本工具编辑 |
| aof-use-rdb-preamble=no | 全文本命令格式 | 文件大、加载慢,属旧模式 |
| base.rdb | 重写时的全量快照 | 缺失即无法加载,不可手工删除 |
| incr.aof | 重写之后追加的命令 | 修复 AOF 只应针对这部分 |
| manifest 清单 | 记录各文件作用与顺序 | 7.0+ 加载与修复都依赖它 |
典型使用场景
- 重启加载时间过长,评估混合模式带来的收益
- AOF 目录文件结构排查,确认 base 与 incr 是否齐全
- AOF 损坏后的修复,判断该修哪一类文件
- 持久化策略评审:AOF 与 RDB 的取舍与组合
- 版本升级后核对目录结构变化与配置默认值
混合模式下 base 文件是二进制格式,手工拼接或文本编辑都会直接损坏数据;修复工具只对 incr 部分使用 --fix。
把 base.rdb 当成冗余文件删除会让 Redis 直接启动失败,AOF 目录里的每个文件都参与加载流程,清理前必须确认。
与 RDB 的配合
- RDB 与 AOF 可以同时开启,重启时优先用 AOF 恢复以保证数据更完整
- 定期核对 aof_last_bgrewrite_status 是否为 ok,重写失败会让文件持续增长
- AOF 目录要纳入备份范围,只备份 RDB 会丢失最近一段时间的写入
混用时的排查思路
- 加载失败先看日志里报错的文件名,定位是 base 还是 incr 出问题
- 修复只针对增量文件,base 损坏只能回退到更早的快照加备份