3. RDB 配置:核心参数详解与工程验证

RDB 持久化的行为完全由 redis.conf 中的一组参数控制。本章聚焦于四个核心配置项:save(触发策略)、stop-writes-on-bgsave-error(错误保护)、rdbcompression(压缩)与 rdbchecksum(校验)。理解这些参数是进行 RDB 回归冒烟测试的前提。

3.1 save 参数:RDB 触发策略详解

save 参数定义了 Redis 在 指定时间间隔内 发生 指定次数写操作 时自动执行 BGSAVE。其格式为:

save <seconds> <changes>

Redis 支持配置多条 save 规则,任意一条满足即触发。以下是 Redis 6.x/7.x 的默认配置:

规则 时间间隔(秒) 写操作次数 典型场景
save 3600 1 3600(1小时) 1 低频写入,1小时内只要有1次变更就保存
save 300 100 300(5分钟) 100 中等频率写入,5分钟内100次变更触发
save 60 10000 60(1分钟) 10000 高频写入,1分钟内1万次变更触发
工程建议: 在冒烟测试中,建议临时设置 save 5 2(5秒内2次写入即触发),以加速 RDB 生成流程,验证配置生效后再恢复生产级规则。

若需禁用自动 RDB 持久化,可使用空规则:

save ""

此时 Redis 仅通过手动 SAVE 或 BGSAVE 命令生成快照。

3.2 stop-writes-on-bgsave-error:写保护开关

该参数控制当 BGSAVE 执行失败时,Redis 是否拒绝写入操作。默认值为 yes。

取值 行为 适用场景
yes(默认) BGSAVE 失败后,所有写命令(SET、LPUSH 等)返回错误,直到下一次 BGSAVE 成功 数据安全优先,防止磁盘故障导致数据丢失
no BGSAVE 失败后,写操作继续正常执行 可用性优先,允许短暂磁盘异常时业务不中断
冒烟验证要点: 测试时可通过模拟磁盘空间不足(如 dd if=/dev/zero of=/tmp/fill bs=1M count=10240)触发 BGSAVE 失败,观察 stop-writes-on-bgsave-error yes 是否按预期拒绝写入。验证后务必恢复磁盘空间并确认 BGSAVE 恢复正常。

3.3 rdbcompression:RDB 文件压缩

该参数决定 Redis 在生成 RDB 文件时是否对字符串对象进行 LZF 压缩。默认值为 yes。

取值 文件大小 CPU 开销 加载速度
yes(默认) 较小(通常减少 50%-70%) BGSAVE 时额外消耗 CPU 加载时需解压,略慢
no 较大(原始数据大小) BGSAVE 时 CPU 开销低 加载时无需解压,更快
性能权衡: 在 CPU 密集型场景下,关闭压缩可降低 BGSAVE 对主线程的 CPU 抢占;在磁盘 I/O 瓶颈场景下,开启压缩可减少磁盘写入量。冒烟测试中建议保持默认 yes,并对比开启/关闭后的 RDB 文件大小与生成耗时。

3.4 rdbchecksum:RDB 文件完整性校验

该参数控制 Redis 在生成和加载 RDB 文件时是否使用 CRC64 校验和。默认值为 yes。

取值 生成时 加载时 性能影响
yes(默认) 在文件末尾写入 CRC64 校验和 校验 CRC64,不匹配则拒绝加载 生成/加载各增加约 10% 的 CPU 开销
no 不写入校验和 跳过校验,直接加载 无额外 CPU 开销
冒烟验证方法: 生成 RDB 文件后,使用 hexdump 或 xxd 查看文件末尾 8 字节的 CRC64 值。手动修改文件任意字节后重启 Redis,观察 rdbchecksum yes 是否拒绝加载并输出 Wrong signature trying to load DB from file 错误。

3.5 参数配置关系总览

以下 SVG 图展示了四个参数在 RDB 生命周期中的位置与作用:

RDB 配置参数作用域 save 触发策略 BGSAVE 执行 stop-writes-on-bgsave-error rdbcompression 压缩 写入 RDB 文件 rdbchecksum 校验 加载 RDB 文件 说明: save 决定何时触发 BGSAVE;BGSAVE 失败时由 stop-writes-on-bgsave-error 决定是否拒绝写入; rdbcompression 控制文件压缩;rdbchecksum 在生成时写入校验和,加载时验证完整性。

3.6 冒烟测试配置清单

以下为回归冒烟测试中推荐的 RDB 配置模板,可直接用于验证:

# 冒烟测试专用 RDB 配置
save 5 2          # 5秒内2次写入触发,加速验证
save 60 100       # 备用规则

stop-writes-on-bgsave-error yes   # 验证写保护机制
rdbcompression yes                # 验证压缩功能
rdbchecksum yes                   # 验证校验和功能

dbfilename dump.rdb
dir /data/redis/rdb/
验证步骤:
  1. 启动 Redis 并执行 SET key1 value1、SET key2 value2,等待 5 秒后检查 dump.rdb 是否生成。
  2. 使用 redis-cli config get save 确认配置生效。
  3. 模拟磁盘故障(如 chmod 000 /data/redis/rdb/),执行写入操作,验证 stop-writes-on-bgsave-error 是否返回错误。
  4. 对比 rdbcompression yes/no 下的文件大小差异。
  5. 手动损坏 RDB 文件,重启 Redis 验证 rdbchecksum 是否拒绝加载。