自动快照的触发条件
save 指令定义什么条件下自动触发快照,格式为 save <秒> <变化数>,含义是「在该秒数内至少发生了这么多次写操作,就触发一次 BGSAVE」。可以配置多条规则,任意一条满足即触发。计数从上次快照成功后开始累计,也就是 INFO 里的 rdb_changes_since_last_save,快照完成后再清零。所有规则都基于同一个计数判断,因此最先满足的那条决定实际节奏。
基本信息
| 配置格式 | save <seconds> <changes> |
|---|---|
| 官方默认 | 3600 秒 1 次 / 300 秒 100 次 / 60 秒 10000 次 |
| 多条规则 | 并集判断,任一满足即触发 |
| 运行中修改 | CONFIG SET save '条件串',整串必须加引号 |
| 关闭自动快照 | CONFIG SET save "" |
| 持久化 | CONFIG REWRITE 才会写入配置文件 |
典型使用场景
- 低写入业务把节奏调稀(如 900 秒 1 次),减少无意义的 fork
- 批量导入前临时放宽条件,避免导入过程中反复触发后台快照
- 纯缓存实例关闭自动快照,只保留手动 BGSAVE 做定期冷备
- 迁移前手动触发 BGSAVE 并等 LASTSAVE 变化,确保拿到完整快照
- 排查「快照太频繁」时,把实际 dirty 计数与规则逐条对照
查看与调整
查看与调整
redis-cli CONFIG GET save # 查看当前规则列表
redis-cli CONFIG SET save '900 1 300 10 60 10000' # 整串加引号,一次设置多条
redis-cli INFO persistence | grep -E 'rdb_changes_since_last_save|rdb_last_save_time'
redis-cli CONFIG SET save '' # 关闭自动快照
redis-cli BGSAVE # 手动触发一次完整快照
redis-cli CONFIG REWRITE # 确认后落盘,避免重启回到旧值观测项读法
| 指标 | 含义 | 正常与异常 |
|---|---|---|
| rdb_changes_since_last_save | 距上次成功快照的写操作数 | 长期贴着阈值说明快照频率偏高 |
| rdb_last_save_time | 上次成功快照的时间戳 | 与当前时间差远超规则上限即为异常 |
| rdb_last_bgsave_status | 最近一次后台快照结果 | 非 ok 要先查磁盘余量与内存 |
| latest_fork_usec | 最近一次 fork 耗时 | 明显偏高说明实例过大或受 THP 影响 |
因为计数在快照成功后才清零,刚完成一次快照后的短时间不会再次触发;判断节奏时看「实际间隔」比看「次数阈值」更贴近真实体验。