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

以下之一: * 整数回复:如果客户端成功解锁,则为 1。 * 整数回复:如果客户端未解锁,则为 0。

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