SHUTDOWN:关闭服务器
用户可以通过执行SHUTDOWN命令来关闭Redis服务器:
SHUTDOWN
在默认情况下,当Redis服务器接收到SHUTDOWN命令时,它将执行以下 动作: 1)停止处理客户端发送的命令请求。 2)根据服务器的持久化配置选项,决定是否执行数据保存操作: ·如果服务器启用了RDB持久化功能,并且数据库距离最后一次成功创 建RDB文件之后已经发生了改变,那么服务器将执行SAVE命令,创建一 个新的RDB文件。 ·如果服务器启用了AOF持久化功能或者RDB-AOF混合持久化功能,那 么它将冲洗AOF文件,确保所有已执行的命令都被记录到了AOF文件 中。 ·如果服务器既没有启用RDB持久化功能,也没有启用AOF持久化功 能,那么服务器将略过这一步。 3)服务器进程退出。 因为Redis服务器在接收到SHUTDOWN命令并关闭自身的过程中,会根据 配置选项来决定是否执行数据保存操作,所以只要服务器启用了持久 化功能,那么使用SHUTDOWN命令来关闭服务器就不会造成任何数据丢 失。
以下代码展示了客户端在执行SHUTDOWN命令时的行为:
redis> SHUTDOWN
not connected> -- 因为服务器已被关闭,所以客户端与服务器之间的连接断开了
而以下则是服务器在接收到SHUTDOWN命令之后输出的日志:
28747:M 26 Jun 2019 15:28:41.474 # User requested shutdown...
28747:M 26 Jun 2019 15:28:41.474 * Saving the final RDB snapshot before exiting.
28747:M 26 Jun 2019 15:28:41.474 * DB saved on disk
28747:M 26 Jun 2019 15:28:41.474 # Redis is now ready to exit, bye bye...
因为被关闭的服务器启用了RDB持久化功能,所以它在关闭之前执行了一次RDB文件保存操作。
通过可选项指示持久化操作
正如之前所言,在默认情况下,服务器在执行SHUTDOWN命令时,是否 执行持久化操作是由服务器的配置选项决定的。
但是在有需要时,用户也可以使用SHUTDOWN命令提供的save选项或者 nosave选项,显式地指示服务器在关闭之前是否需要执行持久化操作:
SHUTDOWN [save|nosave]
如果用户给定的是save选项,那么无论服务器是否启用了持久化功 能,服务器都会在关闭之前执行一次持久化操作。表15-4展示了服务 器在不同持久化配置下,执行SHUTDOWN save命令时的行为。

如果用户给定的是nosave选项,那么服务器将不执行持久化操作,直 接关闭服务器。在这种情况下,如果服务器在关闭之前曾经修改过数 据库,那么它将丢失那些尚未保存的数据。
因为使用SHUTDOWN nosave命令关闭服务器时丢失的数据量和服务器在 遭遇故障停机时丢失的数据量是相同的,所以如果想要知道SHUTDOWN nosave命令在不同的持久化配置下可能会丢失多少数据,那么可以参 考本章之前对于故障停机引发数据丢失的讨论。