CLIENT PAUSE

暂停命令处理。

语法

CLIENT PAUSE timeout [WRITE | ALL]

引入版本:3.0.0

复杂度摘要:O(1)

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

该命令执行以下操作:

  • 它停止处理来自给定模式的普通客户端和 pub/sub 客户端的所有待处理命令。但是,与副本的交互将正常继续。请注意,客户端在尝试执行命令时会正式暂停,因此服务器端不会为不活动的客户端执行任何操作。
  • 它尽快将 OK 返回给调用者,因此 CLIENT PAUSE 命令执行本身不会暂停。
  • 超过指定时间后,所有客户端均解封;这将触发在暂停期间处理每个客户端的查询缓冲区中累积的所有命令。

必需参数

timeout

暂停客户端多长时间,以毫秒为单位。

可选参数

WRITE | ALL

ALL:这是默认模式。所有客户端命令均被阻止。

WRITE:客户端仅在尝试执行写入命令时才会被阻止。

详细说明

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

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

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

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

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

对于早于 6.2 的 Redis 版本,您可以在具有 INFO 复制的 MULTI/EXEC 块中发送 CLIENT PAUSE,以在 Redis 阻塞客户端时获取当前的主偏移量。然后,您可以等待副本上的偏移量,以确保副本已处理完整的复制流。

从 Redis 3.2.10 和 4.0.0 开始,此命令还可以防止键在客户端暂停时被逐出或过期。这使数据集在暂停期间保持静态:客户端无法对其进行写入,并且 Redis 不会通过逐出或过期来更改它。

Redis Software 与 Redis Cloud 兼容性

Redis
软件
Redis
Cloud
说明
❌ 标准
❌主动-主动
❌ 标准
❌主动-主动

返回值

RESP2

简单字符串回复:OK 或者如果超时无效则出错。

RESP3

简单字符串回复:OK 或者如果超时无效则出错。

资料来源:Redis 官方 CLIENT PAUSE 文档;中文内容参考 Redis 文档许可。