# 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 PAUSE
MULTI/EXEC 块与INFO replication
命令一起发送,以便在客户端被阻塞时获取当前的主偏移量。这样,可以在副本端等待特定的偏移量,以确保所有复制流都已处理。
从 Redis 3.2.10 / 4.0.0 开始,此命令还可以防止在客户端暂停期间键被逐出或过期。这样,不仅从客户端无法写入的角度来看,而且从内部操作的角度来看,数据集都可以保证是静态的。
# 返回
简单字符串回复:如果超时无效,该命令返回 OK 或错误。
# 行为改变历史
>= 3.2.0
:客户端暂停也可以防止客户端暂停和键驱逐。
# 历史
- 从 Redis 版本 6.2.0 开始:
CLIENT PAUSE WRITE
模式与mode
选项一起添加。
# 反馈
如果您在此页面上发现问题,或有改进建议,请提交请求以合并或打开存储库中的问题。