3. Redis 持久化机制:RDB 与 AOF 的原理、配置及对迁移的影响
在 Redis 迁移场景中,持久化机制直接决定了数据完整性的保障策略、迁移耗时以及目标端的数据一致性。RDB(快照)与 AOF(追加文件)两种机制在原理、配置和迁移影响上存在显著差异。本章从冒烟测试视角出发,梳理两种机制的核心特性,并分析其对迁移验证的关键影响。
3.1 RDB 持久化:原理与配置
RDB 通过创建内存数据的二进制快照实现持久化,适用于大规模数据的快速恢复和迁移场景。
| 维度 | 说明 |
|---|---|
| 触发方式 | 手动(SAVE/BGSAVE)、自动(save m n 配置)、关闭时(shutdown save) |
| 文件格式 | 单一 .rdb 文件,二进制压缩,体积小 |
| 恢复速度 | 极快,直接加载到内存 |
| 数据丢失风险 | 两次快照间的数据可能丢失 |
| 迁移适用性 | 适合全量迁移,文件可复制、可传输 |
# RDB 自动触发配置示例(save 900 1 表示 900 秒内至少 1 次写入则触发)
save 900 1
save 300 10
save 60 10000
dbfilename dump.rdb
dir /var/lib/redis
冒烟测试要点: 迁移前必须确认源端 RDB 文件完整性(
redis-check-rdb),并记录最后一次快照时间戳,用于迁移后数据校验的基准点。
3.2 AOF 持久化:原理与配置
AOF 以追加日志方式记录每次写操作,提供更高的数据安全性,但文件体积较大,重写机制影响迁移策略。
| 维度 | 说明 |
|---|---|
| 写入策略 | always(每次写入 fsync)、everysec(每秒 fsync)、no(由 OS 决定) |
| 文件格式 | 文本协议,可读,可重放 |
| 恢复速度 | 较慢,需逐条重放命令 |
| 数据丢失风险 | 取决于 fsync 策略,everysec 最多丢失 1 秒数据 |
| 迁移适用性 | 适合增量同步,但文件传输和重放耗时较长 |
# AOF 配置示例
appendonly yes
appendfilename "appendonly.aof"
appendfsync everysec
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb
迁移风险提示: AOF 文件在迁移过程中若未完成重写,可能包含大量冗余命令,导致目标端恢复时间过长。建议迁移前执行
BGREWRITEAOF 压缩文件。
3.3 RDB 与 AOF 对比:迁移视角
| 对比维度 | RDB | AOF |
|---|---|---|
| 数据完整性 | 低(快照间隔丢失) | 高(取决于 fsync 策略) |
| 迁移文件大小 | 小,适合网络传输 | 大,需压缩或重写 |
| 迁移耗时 | 短(文件复制 + 加载) | 长(文件传输 + 命令重放) |
| 增量迁移支持 | 不支持 | 支持(通过 AOF 重放) |
| 冒烟验证重点 | 文件完整性、快照时间点 | 命令重放正确性、文件末尾截断处理 |
3.4 持久化机制对迁移的影响分析
迁移过程中,持久化机制的选择直接影响以下三个关键环节:
- 数据导出阶段: RDB 可直接复制文件;AOF 需考虑文件是否处于重写状态,避免复制不完整文件。
- 数据传输阶段: RDB 文件体积小,传输效率高;AOF 文件可能达到 GB 级别,需评估带宽和时间窗口。
- 数据导入阶段: RDB 加载速度快,但无法增量;AOF 可重放实现增量同步,但需验证命令顺序和幂等性。
冒烟测试设计原则: 若源端同时开启 RDB 和 AOF,迁移时应优先使用 RDB 做全量基线,再通过 AOF 重放增量数据。冒烟用例需分别验证两种文件的正确性和一致性。
3.5 持久化机制与迁移流程关系图
3.6 混合持久化与迁移策略
Redis 4.0 引入混合持久化(RDB + AOF 混合),AOF 重写时先生成 RDB 快照,再追加增量命令。该模式在迁移场景中兼具两者优势:
- 文件体积: 比纯 AOF 小,比纯 RDB 略大
- 加载速度: 快于纯 AOF,接近纯 RDB
- 数据安全性: 保留 AOF 的增量能力
- 迁移建议: 优先使用混合持久化文件作为迁移基线
# 混合持久化配置(Redis 4.0+)
aof-use-rdb-preamble yes
冒烟测试建议: 对于混合持久化文件,需分别验证 RDB 部分和 AOF 部分的正确性。可使用
redis-check-rdb 检查 RDB 段,再用 redis-check-aof 检查整体文件。
3.7 持久化配置对迁移冒烟测试的影响清单
| 配置项 | 迁移影响 | 冒烟测试验证点 |
|---|---|---|
save ""(关闭 RDB) |
无法使用 RDB 文件迁移 | 确认 AOF 是否开启,否则无持久化 |
appendfsync always |
AOF 文件写入频繁,迁移时文件可能处于不一致状态 | 迁移前执行 BGREWRITEAOF 并等待完成 |
auto-aof-rewrite-min-size |
大 AOF 文件未重写时迁移效率低 | 检查 AOF 文件大小,评估传输时间 |
aof-use-rdb-preamble yes |
混合文件迁移效率高 | 验证 RDB 段和 AOF 段均正确 |
dir 路径 |
持久化文件存储位置影响迁移脚本路径 | 确认文件路径可读,权限正确 |
3.8 迁移前后持久化配置一致性验证
迁移完成后,目标端 Redis 的持久化配置应与源端保持一致,否则可能导致数据丢失或恢复失败。冒烟测试需验证以下配置项:
- 持久化开关:
appendonly、save配置是否一致 - 文件路径:
dir、dbfilename、appendfilename是否匹配 - 写入策略:
appendfsync策略是否相同 - 重写策略:
auto-aof-rewrite-percentage、auto-aof-rewrite-min-size是否一致
常见迁移故障: 源端开启 AOF 但目标端未开启,迁移后写入操作不持久化,重启后数据丢失。冒烟测试必须检查目标端持久化配置与源端一致。