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