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 持久化机制对迁移的影响分析

迁移过程中,持久化机制的选择直接影响以下三个关键环节:

  1. 数据导出阶段: RDB 可直接复制文件;AOF 需考虑文件是否处于重写状态,避免复制不完整文件。
  2. 数据传输阶段: RDB 文件体积小,传输效率高;AOF 文件可能达到 GB 级别,需评估带宽和时间窗口。
  3. 数据导入阶段: RDB 加载速度快,但无法增量;AOF 可重放实现增量同步,但需验证命令顺序和幂等性。
冒烟测试设计原则: 若源端同时开启 RDB 和 AOF,迁移时应优先使用 RDB 做全量基线,再通过 AOF 重放增量数据。冒烟用例需分别验证两种文件的正确性和一致性。

3.5 持久化机制与迁移流程关系图

持久化机制与迁移流程关系 源端 Redis RDB 快照文件 AOF 追加文件 文件复制/传输 命令重放/同步 目标端 Redis 数据一致性校验 冒烟测试关键检查点: 1. RDB 文件完整性校验(redis-check-rdb) 2. AOF 文件末尾截断处理(redis-check-aof --fix) 3. 迁移后 key 数量与源端一致,TTL 未丢失

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 但目标端未开启,迁移后写入操作不持久化,重启后数据丢失。冒烟测试必须检查目标端持久化配置与源端一致。