首页/数据/Redis 进阶速查/save 配置:自动快照节奏
持久化56 条

save 配置:自动快照节奏

save 行定义触发条件:save <秒> <变更数> 表示在该秒数内写操作达到指定次数就触发快照,多条规则按并集判断,任一满足即触发。

Redis 进阶速查数据更新于 2026-10-13

自动快照的触发条件

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 影响
因为计数在快照成功后才清零,刚完成一次快照后的短时间不会再次触发;判断节奏时看「实际间隔」比看「次数阈值」更贴近真实体验。

易错点

  • 用 CONFIG SET save 900 1 这种不加引号的写法会报参数错误,多条条件必须合并成一个字符串传入
  • 条件写得过密(如 60 秒 1 次变更)会让批量导入期间快照反复触发,fork 与磁盘压力同时陡增
  • 只改运行中配置不执行 CONFIG REWRITE,重启后规则回到旧值,形成配置文档与实际行为不符的状态
  • 关闭自动快照后忘记另外安排手动备份,一旦宕机或误操作就可能整库丢失

数据来源与参考

  • Redis 官方文档:redis.conf 中 save 指令说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌