shutdown
SHUTDOWN
SHUTDOWN [NOSAVE|SAVE]
自1.0.0起可用。
命令行为如下:
- 停止所有的客户端。
- 如果至少配置了一个
保存点,
则执行阻塞保存。
- 如果启用了 AOF ,请刷新仅附加文件。
- 退出服务器。
如果启用了持久性,则此命令可确保 Redis 在不丢失任何数据的情况下关闭。如果客户端仅使用 SAVE ,然后退出,则不能保证,因为其他客户端可能会更改这两个命令之间的数据库数据。
注意:配置为不保存在磁盘上的 Redis 实例(未配置 AOF ,也未配置 “save” 指令)不会将 RDB 文件转储到 SHUTDOWN 上,因为通常不希望 Redis 实例仅用于缓存以阻止关闭。
SAVE 和 NOSAVE 修饰符
可以指定一个可选的修饰符来改变命令的行为。特别:
- 即使未配置保存点,
SHUTDOWN SAVE
也会强制执行 DB 保存操作。
- 即使配置了一个或多个保存点,
SHUTDOWN NOSAVE
也会阻止数据库保存操作。(你可以把这个变种看作是一个假设的ABORT
命令,它只是停止服务器)。
SHUTDOWN 失败的条件
当仅附加文件启用时,关机可能失败,因为系统处于不允许安全立即保留在磁盘上的状态。
通常情况下,如果有一个 AOF 子进程执行 AOF 重写,则 Redis 将简单地杀死它并退出。但是,有两种情况不安全,因此 SHUTDOWN
命令将被拒绝并返回错误。发生这种情况时:
- 用户刚打开 AOF ,服务器触发了第一次AOF重写,以创建初始 AOF 文件。在这种情况下,停止将导致完全丢失数据集:一旦重新启动,服务器可能会启用 AOF ,而根本没有任何 AOF 文件。
- 启用了 AOF 的从站,与其主站重新连接,执行完全重新同步,并重新启动 AOF 文件,触发初始 AOF 创建过程。在这种情况下,不完成 AOF 重写是很危险的,因为从主设备收到的最新数据集将丢失。新的主服务器实际上可以是一个不同的实例(如果
SLAVEOF
命令用于重新配置从服务器),所以重要的是完成 AOF 重写并在服务器启动时使用表示内存中数据集的正确数据集被终止。
有条件的时候,我们只想尽快终止一个 Redis 实例,不管它的内容是什么。在这种情况下,命令的正确组合是发送 CONFIG 附加否,
然后是 SHUTDOWN NOSAVE
。如果需要,第一个命令将关闭 AOF ,如果有一个活动的话,将终止 AOF 重写子。由于 AOF 不再被启用,第二个命令不会执行任何问题。
返回值
简单的字符串回复错误。成功后,服务器退出并关闭连接后不会返回任何内容。