*Redis CLIENT PAUSE 命令 暂停处理客户端命令一段时间
*语法说明
CLIENT PAUSE timeout [WRITE | ALL]
*中文详细说明
CLIENT PAUSE 命令暂停处理来自客户端的命令请求,暂停时间由 timeout 参数指定(单位为毫秒)。
暂停范围:
重要行为:
- 调用者自身不会被暂停(命令立即返回
OK) - 与从节点的复制命令不受影响
- 暂停期间,所有客户端查询缓冲区中积累的命令会在暂停结束后被批量处理
- 从 Redis 3.2.10 / 4.0.0 起,暂停期间也会停止 key 的过期和驱逐(eviction),保持数据处于静止状态
典型应用场景 — 实例切换:
- 执行 CLIENT PAUSE 暂停所有客户端
- 等待几秒,让从节点处理完来自主节点的复制命令
- 将一个从节点提升为主节点
- 重新配置客户端连接到新的主节点
也可以配合 INFO replication 在 MULTI/EXEC 事务中使用,检查主节点的复制偏移量,确保数据同步完整后再切换。
*可运行示例
*示例 1:暂停所有客户端 5 秒
# 暂停所有客户端命令处理 5000 毫秒
redis-cli CLIENT PAUSE 5000
预期输出:
OK
*示例 2:仅暂停写命令(Redis 6.2+)
# 只允许读命令,暂停写命令 3 秒
redis-cli CLIENT PAUSE 3000 WRITE
# 此时其他连接的 GET 仍可执行,但 SET 会被阻塞
预期输出:
OK
*示例 3:配合事务获取复制信息
# 在事务中暂停并获取复制状态
redis-cli MULTI
redis-cli CLIENT PAUSE 10000
redis-cli INFO replication
redis-cli EXEC
预期输出:
OK
OK
OK
1) OK
2) "# Replication\r\nrole:master\r\nconnected_slaves:2\r\n..."
*示例 4:主从切换场景
# 步骤 1:暂停客户端写入
redis-cli CLIENT PAUSE 30000
# 步骤 2:检查从节点同步状态
redis-cli INFO replication
# 步骤 3:等待从节点 lag=0 后,将某个从节点提升为主节点
# redis-cli -h slave-host REPLICAOF NO ONE
# 步骤 4:重新配置其他从节点指向新主节点
# redis-cli -h other-slave REPLICAOF new-master 6379
# 步骤 5:恢复客户端(暂停时间到后自动恢复)
*返回值
- 简单字符串回复(Simple String):成功时返回
OK - 错误回复(Error Reply):
timeout参数无效时返回错误
*版本兼容性
| Redis 版本 | 变更说明 |
|---|---|
| >= 6.2.0 | 新增 WRITE 模式,支持只暂停写命令 |
| >= 3.2.10 / 4.0.0 | 暂停期间停止 key 的过期和驱逐 |
| >= 2.9.50 | 新增 CLIENT PAUSE 命令 |
| < 2.9.50 | 不支持此命令 |
*时间复杂度
O(1) — 常量时间。仅设置一个服务器级别的暂停状态。