CLIENT PAUSE

语法
CLIENT PAUSE timeout [WRITE | ALL]
可用版本
3.0.0
时间复杂度
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 之前的版本,可以在 MULTI/EXEC 块中一起发送 CLIENT PAUSEINFO replication 命令,以获取客户端被阻止时的当前主服务器偏移量。这样,可以在副本端等待特定偏移量,以确保所有复制流都已处理。

从 Redis 3.2.10 / 4.0.0 开始,此命令还会阻止在客户端暂停期间删除或过期键。这样可以确保数据集在客户端无法写入的视角以及内部操作的视角上都是静态的。

行为更改历史记录

  • >= 3.2.0:客户端暂停会阻止客户端暂停和键删除。

RESP2/RESP3 响应

简单字符串响应OK 或如果超时无效则为错误。

历史

  • 从 Redis 6.2.0 版本开始:CLIENT PAUSE WRITE 模式添加了 mode 选项。
RATE THIS PAGE
Back to top ↑