Redis自动快照由redis.conf中save指令控制,格式为save <秒数> <修改键数>,满足任一条件即触发BGSAVE;默认多行配置为“或”关系,如save 900 1、save 300 10、save 60 10000;禁用需显式设为save ""并重载配置。

redis.conf 里的 save 指令怎么配
自动保存规则全靠 save 指令控制,它写在 redis.conf 的 SNAPSHOTTING 区域。每行一个 save <seconds> <changes>,表示“<seconds> 秒内至少有 <changes> 个 key 被修改”就触发 BGSAVE。
常见默认配置(Redis 6.2 及以前):
-
save 900 1:15 分钟内至少 1 个 key 变动 -
save 300 10:5 分钟内至少 10 个 key 变动 -
save 60 10000:1 分钟内至少 10000 个 key 变动
Redis 7 默认更保守(降低频繁 fork 压力):
-
save 3600 1:60 分钟内至少 1 个 key 变动 -
save 300 100:5 分钟内至少 100 个 key 变动 -
save 60 10000:1 分钟内至少 10000 个 key 变动
多个 save 行是“或”关系——满足任一即触发;只要有一行生效,RDB 自动保存就开启。
停用 RDB 自动保存要怎么操作
想彻底关掉自动快照,不能只注释掉几行,必须显式禁用:
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 把所有
save行删掉或注释掉后,加一行:save "" - 或者直接写:
save后不跟任何参数(部分版本也认)
注意:stop-writes-on-bgsave-error yes 默认开启,一旦某次 BGSAVE 失败(比如磁盘满、权限不足),Redis 会拒绝写入命令并报错 ERR Error: BGSAVE failed。如果关了自动保存,这个开关实际失效,但建议仍保持为 yes,避免误开 save 后出问题却没人察觉。
修改配置后要不要重启 Redis
不需要重启,但必须重载配置才能生效:
- 改完
redis.conf后,执行redis-cli CONFIG REWRITE(仅当启用了CONFIG SET权限且配置文件可写) - 更稳妥的做法是:
redis-cli CONFIG SET save "300 100"临时生效,再配合CONFIG REWRITE持久化到文件 - 如果只是测试,也可以直接
redis-cli CONFIG SET save ""立刻停用,无需改文件
验证是否生效:执行 redis-cli CONFIG GET save,返回值就是当前生效的规则;再用 redis-cli INFO persistence 查看 rdb_last_bgsave_status:ok 和 rdb_last_bgsave_time 确认最近一次快照时间是否符合预期。
为什么改了 save 却没触发 BGSAVE
常见原因不是配置写错,而是被其他机制覆盖或抑制:
- 如果同时启用了 AOF 且
appendonly yes,Redis 在正常关闭时只写 AOF,不会生成 RDB(除非显式调用BGSAVE) -
auto-aof-rewrite-percentage或auto-aof-rewrite-min-size触发 AOF 重写时,会临时禁用 RDB 自动保存,避免并发写盘 - 内存使用率极高时,
fork()可能失败(Cannot allocate memory),导致BGSAVE静默跳过,日志里会有Failed to fork记录 - 检查
dir配置指向的目录是否有写权限,dbfilename是否合法(比如含非法字符或路径过长)
RDB 自动触发依赖的是“写操作计数器”,不是定时器——只有真的有 key 被增删改,计数才涨。空闲状态下,即使过了 3600 秒也不会触发,这点和很多人直觉相反。

















