真正关掉RDB需三步:删dump.rdb文件、配置save ""并重启、关闭stop-writes-on-bgsave-error和rdb-aof-use-rdb-preamble;漏任一环RDB仍生效。

CONFIG SET save "" 只禁用自动触发,不删 dump.rdb 就白干
执行 CONFIG SET save "" 确实能让 Redis 立刻停止按时间/写入量自动触发 SAVE 或 BGSAVE,但只要 dump.rdb 文件还躺在 dir 目录下,Redis 启动时仍会加载它——这不是 bug,是设计行为。更麻烦的是,FLUSHALL、主从全量同步、甚至 SHUTDOWN(没带 nosave)都可能重新写入这个文件。
- 先查路径:
redis-cli CONFIG GET dir和CONFIG GET dbfilename - 进对应目录,手动删掉
dump.rdb和残留的dump.rdb.tmp - 验证是否真删了:
ls -l $(redis-cli CONFIG GET dir | tail -n 1)
redis.conf 里只注释 save 行,Redis 7.0+ 会 fallback 到默认策略
别信“注释掉所有 save 行就完事”这种老经验。Redis 7.0+(及部分 6.x 版本)在配置文件里找不到显式 save "" 时,会 fallback 到内置兜底规则(比如 save 300 1),IO 突然飙升不是偶然。
- 必须在
redis.conf中写明:save ""(注意:双引号之间不能有空格,也不能写成save ""带多余换行) - 不要只注释原有行,更不要留空行——Redis 解析器对空行和注释的处理不如显式空字符串可靠
- 改完务必重启,或执行
CONFIG REWRITE(但要确认CONFIG GET CONFIGFILE返回有效路径且有写权限)
关 RDB 还得顺手关 stop-writes-on-bgsave-error
即使你已禁用 RDB,如果之前发生过 BGSAVE 失败,且 stop-writes-on-bgsave-error yes(默认值),Redis 会拒绝所有写命令,redis-cli ping 都返回 (error) MISCONF Redis is configured to save RDB snapshots...。
- 临时解法:
CONFIG SET stop-writes-on-bgsave-error no - 长期解法:在
redis.conf中明确写stop-writes-on-bgsave-error no,避免重启后又卡住 - 这个配置和 RDB 开关无关,但它是“关 RDB 后服务还能不能写”的实际拦路虎
混合持久化开着,RDB 关不干净
如果你启用了 rdb-aof-use-rdb-preamble yes(Redis 4+ 默认关闭,但某些发行版或运维模板可能打开),即使 AOF 关了,RDB 文件仍可能被当作 preamble 加载——相当于 RDB 暗中复活。
- 检查当前状态:
redis-cli CONFIG GET rdb-aof-use-rdb-preamble - 确保设为
no:CONFIG SET rdb-aof-use-rdb-preamble no,并在redis.conf中固化 - 这个开关常被忽略,但它让 RDB 和 AOF 的边界变模糊,关 RDB 必须连它一起清
真正关掉 RDB 不是改一行配置的事,而是清理磁盘文件 + 锁定运行时行为 + 切断混合依赖的组合动作。漏掉任意一环,INFO persistence 里 rdb_last_save_time 还在跳,说明它根本没死透。


















