# Shutdown

异步保存数据到硬盘,并关闭服务器

语法

SHUTDOWN [NOSAVE | SAVE] [NOW] [FORCE] [ABORT]
  • 可用版本:

    1.0.0

  • 时间复杂度:

    保存时O(N),其中N是保存数据时所有数据库中key的总数,否则O(1)

  • ACL 类别:

    @admin, @slow, @dangerous

命令行为如下:

  • 如果有任何复制滞后的副本:
    • CLIENT PAUSE通过使用该WRITE选项来暂停尝试写入的客户端。
    • 等待配置的shutdown-timeout(默认 10 秒)以使副本赶上复制偏移量。
  • 停止所有客户端。
  • 如果配置了至少一个保存点,则执行阻塞保存。
  • 如果启用了 AOF,则刷新仅附加文件。
  • 退出服务器。

如果启用了持久性,则此命令可确保关闭 Redis 而不会丢失任何数据。

注意:配置为不在磁盘上持久化的 Redis 实例(没有配置 AOF,也没有“保存”指令)不会将 RDB 文件转储到SHUTDOWN上,因为通常您不希望仅用于缓存的 Redis 实例在关闭时阻塞下。

另请注意:如果 Redis 接收到其中一个信号SIGTERMSIGINT,则执行相同的关闭序列。另请参阅信号处理。

# 修饰符

可以指定可选的修饰符来改变命令的行为。具体来说:

  • 即使没有配置保存点,SAVE也会强制执行 DB 保存操作。
  • 即使配置了一个或多个保存点, NOSAVE也会阻止数据库保存操作。
  • 现在跳过等待滞后的副本,即绕过关闭序列中的第一步。
  • FORCE忽略通常会阻止服务器退出的任何错误。有关详细信息,请参阅以下部分。
  • ABORT取消正在进行的关闭,并且不能与其他标志结合使用。

# SHUTDOWN 失败的情况

配置保存点或指定SAVE修饰符时,如果无法保存 RDB 文件,可能会导致关机失败。然后,服务器继续运行以确保没有数据丢失。这可以使用FORCE修饰符绕过,导致服务器无论如何都退出。

启用 Append Only File 后,关闭可能会失败,因为系统处于不允许立即安全地保存在磁盘上的状态。

通常,如果有一个 AOF 子进程执行 AOF 重写,Redis 会简单地杀死它并退出。但是,在某些情况下这样做是不安全的,除非指定了FORCE修饰符,否则SHUTDOWN命令将被拒绝并出现错误。这发生在以下情况:

  • 用户刚刚开启 AOF,服务器触发了第一次 AOF 重写,以便创建初始 AOF 文件。在这种情况下,停止将导致数据集完全丢失:一旦重新启动,服务器可能会启用 AOF,而根本没有任何 AOF 文件。
  • 启用 AOF 的副本,与它的主服务器重新连接,执行完全重新同步,并重新启动 AOF 文件,触发初始 AOF 创建过程。在这种情况下,不完成 AOF 重写是危险的,因为从 master 接收到的最新数据集将会丢失。新的 master 实际上甚至可以是不同的实例(如果使用REPLICAOFSLAVEOF命令来重新配置副本),因此完成 AOF 重写并从代表内存中数据集的正确数据集开始是很重要的服务器被终止。

在某些情况下,我们只想尽快终止 Redis 实例,而不管它的内容是什么。在这种情况下,可以使用命令SHUTDOWN NOW NOSAVE FORCE 。在 7.0 之前的版本中,NOWFORCE标志不可用,正确的命令组合是发送一个CONFIG appendonly no后跟一个SHUTDOWN NOSAVE。如果需要,第一个命令将关闭 AOF,如果有一个活动的,将终止 AOF 重写子。由于不再启用 AOF,第二个命令执行起来不会有任何问题。

# 将数据丢失的风险降至最低

shutdown-timeout从 Redis 7.0 开始,服务器在关闭之前等待滞后副本最多可配置,默认为 10 秒。在未配置保存点且禁用 AOF 的情况下,这可以最大程度地降低数据丢失的风险。在 7.0 版本之前,在无盘设置中关闭负载较重的主节点更有可能导致数据丢失。为了最大限度地降低此类设置中数据丢失的风险,建议在关闭主节点之前触发手动FAILOVER(或CLUSTER FAILOVER)将主节点降级为副本并将其中一个副本提升为新主节点。

# 返回

简单字符串回复:OK如果ABORT已指定且关闭已中止。成功关闭时,由于服务器退出并关闭连接,因此不会返回任何内容。失败时,返回错误。

# 行为改变历史

  • >= 7.0.0:引入了在退出之前等待滞后的副本。

# 历史

  • 从 Redis 版本 7.0.0 开始:添加了NOW,FORCEABORT修饰符。

# 反馈

如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。

Last Updated: 4/18/2023, 8:45:33 AM