Redis CLIENT PAUSE 命令是连接控制命令,它可以将所有客户端的访问暂停指定的毫秒数。
命令格式
CLIENT PAUSE timeout
可用版本:>=2.9.50
时间复杂度:O(1)
该命令执行如下:
- 它会停止处理所有来自一般客户端或者 pub/sub 客户端的命令。但是和 slaves 的交互命令不受影响。
- 因为它会尽快返回 OK 给调用者,所以 CLIENT PAUSE 不会被自己暂停。
- 当指定的超时时间结束,所有的客户端都被解除阻塞,查询缓存里积累的所有命令都会被处理。
使用场景
当该命令可以可控的将客户端从一个 Redis 实例切换至另一个实例。比如,当需要升级一个实例时,管理员可以作如下操作:
- 使用 CLIENT PAUSE 暂停所有客户端。
- 等待数秒,让 slaves 节点处理完所有来自 master 的复制命令。
- 将一个 salve 节点切换为 master。
- 重配客户端以来接新的 master 节点。
可以在 MULTI/EXEC 中一起使用 CLIENT PAUSE 和 INFO replication 以在阻塞的同时,获取当前 master 的偏移量。用这种方法,可以让 slaves 处理至指定的复制偏移节点。
从 Redis 3.2.10/4.0.0 开始,此命令还可以防止在客户端暂停期间将 keys 过期。不仅从客户端角度无法写入,还是从内部操作的角度来看,数据集保证是静态的。
命令返回值
命令返回 OK,超时设置无效,则返回错误。