CLIENT UNBLOCK
取消阻止来自不同连接的阻止命令阻止的客户端。
语法
CLIENT UNBLOCK client-id [TIMEOUT | ERROR]
引入版本:5.0.0
复杂度摘要:O(log N)
从一个连接使用此命令来取消阻止被阻止操作(例如 BRPOP、XREAD 或 WAIT)阻止的客户端。
默认情况下,Redis 会解除对客户端的阻止,就像阻止的命令超时一样。您可以传递一个可选参数来选择解锁行为:TIMEOUT、默认值或 ERROR。如果指定 ERROR,Redis 会解锁客户端并返回一个错误,指示客户端已被强制解锁。具体来说,客户端将收到以下错误:
-UNBLOCKED client unblocked via CLIENT UNBLOCK
错误文本可能会随着时间的推移而改变,但错误代码将保持为-UNBLOCKED。
必需参数
client-id
需要解封的客户端ID。
可选参数
TIMEOUT | ERROR
如何解除对客户端的阻止:就像超时已过期一样(TIMEOUT,默认值),或者通过返回错误(ERROR)。
详细说明
当您需要监视具有有限连接数的多个按键时,请使用此命令。例如,您可以使用 XREAD 监视多个流,而无需使用超过 N 个连接。如果您的消费者进程需要监视另一个流键,您可以避免打开另一个连接:取消阻止池中的一个连接,添加新键,然后再次发出阻止命令。
要使用此模式,请创建一个额外的控制连接,在需要时发送 CLIENT UNBLOCK。在对每个受监视的连接运行阻止操作之前,请运行 CLIENT ID 以获取该连接的 ID。当您需要添加或删除键时,请使用控制连接为正在运行阻止命令的连接发送 CLIENT UNBLOCK。阻塞命令返回,然后您可以使用更新的键集重新发出该命令。
以下示例使用 Redis Streams,但您可以将相同的模式应用于其他阻塞操作。
Connection A (blocking connection):
> CLIENT ID
2934
> BRPOP key1 key2 key3 0
(client is blocked)
... Now we want to add a new key ...
Connection B (control connection):
> CLIENT UNBLOCK 2934
1
Connection A (blocking connection):
... BRPOP reply with timeout ...
NULL
> BRPOP key1 key2 key3 key4 0
(client is blocked again)
Redis Software 与 Redis Cloud 兼容性
| Redis 软件 |
Redis Cloud |
说明 |
|---|---|---|
| ✅ 标准 |
✅ 标准 |
返回值
RESP2
以下之一: * 整数回复:如果客户端成功解锁,则为 1。 * 整数回复:如果客户端未解锁,则为 0。
RESP3
资料来源:Redis 官方 CLIENT UNBLOCK 文档;中文内容参考 Redis 文档许可。