客户端解锁

语法
CLIENT UNBLOCK client-id [TIMEOUT | ERROR]
从以下位置开始可用:
5.0.0
时间复杂度:
O(log N),其中 N 是客户端连接数
ACL 类别:
@admin, @slow, @dangerous, @connection,

此命令可以从其他连接取消阻止在阻止作中阻止的客户端,例如:BRPOPXREADWAIT.

默认情况下,客户端将被取消阻止,就像命令的超时为 reached,但是,如果传递了附加(和可选)参数,则可以指定取消阻止行为,可以是 TIMEOUT(默认值)或 ERROR。如果指定了 ERROR,则行为是取消阻止客户端,将客户端被强制取消阻止的事实作为 error 返回。具体而言,客户端将收到以下错误:

-UNBLOCKED client unblocked via CLIENT UNBLOCK

注意:当然,通常不能保证错误文本仍然存在 相同,但错误代码将保留-UNBLOCKED.

这个命令特别有用,尤其是当我们使用 连接数量有限。例如,我们可能希望监控多个 流与XREAD不使用超过 N 个连接。然而,在某些 点通知使用者进程还有一个流密钥 进行监控。为了避免使用更多连接,最佳行为是 要停止来自池中某个连接的 blocking 命令,请将 新密钥,然后再次发出 blocking 命令。

为了获得此行为,使用了以下模式。该过程使用 一个额外的控制连接,以便将CLIENT UNBLOCK命令 如果需要。同时,在对另一个 connections,则进程将运行CLIENT ID获取关联的 ID 与那个连接。何时应添加新密钥,或者何时应添加密钥 不再受监控,则相关的 connection blocking 命令将中止 通过发送CLIENT UNBLOCK在 Control 连接中。blocking 命令 将返回并最终可以重新发行。

但是,此示例显示了 Redis 流上下文中的应用程序 该模式是一种通用模式,可以应用于其他情况。

例子

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)

RESP2/RESP3 回复

以下选项之一:


为本页评分
返回顶部 ↑