客户端解锁
语法
CLIENT UNBLOCK client-id [TIMEOUT | ERROR]
- 从以下位置开始可用:
- 5.0.0
- 时间复杂度:
- O(log N),其中 N 是客户端连接数
- ACL 类别:
-
@admin
,@slow
,@dangerous
,@connection
,
此命令可以从其他连接取消阻止在阻止作中阻止的客户端,例如:BRPOP
或XREAD
或WAIT
.
默认情况下,客户端将被取消阻止,就像命令的超时为 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 回复
以下选项之一: