# Client Pause

在指定时间内终止运行来自客户端的命令

语法

CLIENT PAUSE timeout [WRITE | ALL]
  • 可用版本:

    2.9.50

  • 时间复杂度:

    O(1)

  • ACL 类别:

    @admin, @slow, @dangerous, @connection

CLIENT PAUSE是一个连接控制命令,能够将所有 Redis 客户端挂起指定的时间量(以毫秒为单位)。

该命令执行以下操作:

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

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

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

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

  • EVAL/ EVALSHA:将阻止所有脚本的客户端。
  • PUBLISH: 会屏蔽客户端。
  • PFCOUNT: 会屏蔽客户端。
  • WAIT:确认将被延迟,因此该命令将显示为被阻止。

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

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

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

对于 6.2 之前的版本,可以将CLIENT PAUSEMULTI/EXEC 块与INFO replication命令一起发送,以便在客户端被阻塞时获取当前的主偏移量。这样,可以在副本端等待特定的偏移量,以确保所有复制流都已处理。

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

# 返回

简单字符串回复:如果超时无效,该命令返回 OK 或错误。

# 行为改变历史

  • >= 3.2.0:客户端暂停也可以防止客户端暂停和键驱逐。

# 历史

  • 从 Redis 版本 6.2.0 开始:CLIENT PAUSE WRITE模式与mode选项一起添加。

# 反馈

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

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