客户端暂停

语法
CLIENT PAUSE timeout [WRITE | ALL]
从以下位置开始可用:
3.0.0
时间复杂度:
O(1)
ACL 类别:
@admin, @slow, @dangerous, @connection,

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

该命令执行以下作:

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

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

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

对于WRITEmode 时,某些命令具有特殊行为:

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

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

  • 使用 Pause the clients usingCLIENT PAUSE
  • 等待几秒钟,以确保副本处理了来自主服务器的最新复制流。
  • 将其中一个副本转换为主副本。
  • 重新配置 Client 端以连接新的 Master。

从 Redis 6.2 开始,推荐的客户端暂停模式为WRITE.此模式将停止所有复制流量,可以是 aborted 替换为CLIENT UNPAUSE命令,并允许重新配置旧主服务器,而不会冒着接受 故障转移。这也是集群故障转移期间使用的模式。

对于 6.2 之前的版本,可以发送CLIENT PAUSEINFO replication命令来获取客户端被阻塞时的当前 master 偏移量。这样就可以在 replica 端等待特定的偏移量,以确保所有复制流都得到处理。

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

行为更改历史记录

  • >= 3.2.0:客户端暂停还可以阻止客户端暂停和密钥逐出。

RESP2/RESP3 回复

简单的字符串回复OK或者如果超时无效,则为 error。

历史

  • 从 Redis 版本 6.2.0 开始:CLIENT PAUSE WRITE模式与mode选择。
为本页评分
返回顶部 ↑