首页/数据/数据库速查/SHUTDOWN 保存语义与停机规范
Redis 运维与场景124 条

SHUTDOWN 保存语义与停机规范

SHUTDOWN [NOSAVE|SAVE]:默认在持久化开启时保存再退出;NOSAVE 跳过保存;从容停机还要看 AOF 缓冲区是否已刷盘。

数据库速查数据更新于 2026-10-13

停机时的保存行为

SHUTDOWN 是让 Redis 优雅退出的命令:默认行为取决于持久化配置,开启 RDB 时会先保存快照再退出,开启 AOF 时会先刷写并关闭 AOF。SHUTDOWN NOSAVE 则跳过保存直接退出,只在明确不需要内存数据的场景使用。理解这套默认逻辑,才能解释「为什么 kill -9 之后数据丢了」。

基本信息

适用平台Redis 全版本;命令名与语义长期稳定
语法SHUTDOWN [NOSAVE | SAVE] [NOW] [FORCE] [ABORT]
默认行为按持久化配置决定是否保存,通常是保存后退出
AOF 场景正常退出会把 AOF 缓冲区刷盘
替代方式systemctl stop redis 会触发同样的优雅退出流程

典型使用场景

  • 计划内维护停机:先确认快照状态再执行优雅关闭
  • 变更配置前重启实例:用 SHUTDOWN SAVE 保证数据落盘
  • 容器化部署的停止流程:理解 stop 信号触发的保存行为
  • 故障演练:验证强杀与优雅关闭的数据差异
  • 迁移实例前主动落盘,避免恢复时数据回退

标准停机流程

标准停机流程
# 停机前先确认上一次持久化是否正常
INFO persistence | grep rdb_last_bgsave_status
INFO persistence | grep aof_last_bgrewrite_status
# 保存快照后退出(默认行为,显式写出更清晰)
SHUTDOWN SAVE
# 明确不需要数据时跳过保存
SHUTDOWN NOSAVE
# systemd 环境下的等价做法
systemctl stop redis
# 强杀(相当于跳过保存,通常不是想要的效果)
# kill -9 $(pidof redis-server)

停机方式对照

方式是否保存适用
SHUTDOWN SAVE保存 RDB 后退出计划内维护、变更重启
SHUTDOWN 默认按持久化配置执行常规停机
SHUTDOWN NOSAVE跳过保存确认数据可丢的临时实例
systemctl stop走优雅退出流程生产环境标准做法
kill -9不保存,AOF 可能丢缓冲仅限进程无响应时使用
SHUTDOWN 执行后客户端连接会断开并收到错误,这是正常现象;脚本里应把连接中断视为预期结果而不是失败重试。
停机前不检查快照状态:带着失败的快照直接停机,下次启动会加载更早的数据,看起来像「重启后数据回退」。

易错点

  • kill -9 之后抱怨丢数据:强杀不触发保存,属于预期行为,需要保留数据就必须优雅关闭
  • 停机前不核对 rdb_last_bgsave_status:已损坏的快照被当成本次落盘结果,重启后数据版本更旧
  • 在需要保留数据时使用 NOSAVE:命令本身没有报错,但内存数据随进程一起消失
  • 把停机当成清空手段:需要清库应使用 FLUSHALL 等命令,停机重启在 AOF 开启时会把数据重新加载回来

数据来源与参考

  • Redis 官方文档: SHUTDOWN

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌