CLIENT PAUSE

用法
CLIENT PAUSE timeout [ WRITE | ALL ]
复杂度
O(1)
起始版本
3.0.0
ACL 类别
@connection, @admin, @dangerous, @slow

CLIENT PAUSE 是一个连接控制命令,能够暂停所有 Valkey 客户端指定的时长(毫秒)。

该命令执行以下操作

  • 它停止处理给定模式下所有来自普通客户端和发布/订阅客户端的待处理命令。然而,与副本的交互将正常继续。请注意,客户端在尝试执行命令时才会被正式暂停,因此服务器端不会为非活跃客户端执行任何工作。
  • 然而,它会尽快向调用者返回 OK,因此 CLIENT PAUSE 命令本身的执行不会被暂停。
  • 当指定时间过去后,所有客户端都将被解除阻塞:这将触发处理在暂停期间累积在每个客户端查询缓冲区中的所有命令。

客户端暂停目前支持两种模式

  • ALL:这是默认模式。所有客户端命令都被阻塞。
  • WRITE:客户端仅在尝试执行写入命令时被阻塞。

对于 WRITE 模式,一些命令具有特殊行为

  • EVAL/EVALSHA:将阻塞客户端执行所有脚本。
  • PUBLISH:将阻塞客户端。
  • PFCOUNT:将阻塞客户端。
  • WAIT:确认将被延迟,因此此命令将显示为阻塞状态。

此命令很有用,因为它能够以受控方式将客户端从一个 Valkey 实例切换到另一个。例如,在实例升级期间,系统管理员可以执行以下操作

  • 使用 CLIENT PAUSE 暂停客户端
  • 等待几秒钟,确保副本处理了来自主服务器的最新复制流。
  • 将其中一个副本转换为主服务器。
  • 重新配置客户端以连接到新的主服务器。

客户端暂停的推荐模式是 WRITE。此模式将停止所有复制流量,可以通过 CLIENT UNPAUSE 命令中止,并允许重新配置旧主服务器,而不会在故障转移后冒着接受写入的风险。这也是集群故障转移期间使用的模式。

此命令还可以防止在客户端暂停期间键被逐出或过期。这样,数据集不仅从客户端无法写入的角度来看是静态的,而且从内部操作的角度来看也是静态的。

RESP2/RESP3 回复

简单字符串回复OK 或在超时无效时的错误。

历史

版本 变更
6.2.0

CLIENT PAUSE WRITE 模式以及 mode 选项被添加。