PSUBSCRIBE pattern [pattern ...]

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是客户端已经订阅的模式数量。

为客户端订阅给定的模式。

支持的全局样式模式:

  • h?llo订阅hello,hallo和hxllo
  • h*llo订阅hllo和heeeello
  • h[ae]llo订阅hello但hallo,不订阅hillo

\如果要逐字匹配特殊字符,请使用转义字符。

PUBLISH channel message

从 2.0.0 开始可用。

时间复杂度: O(N+M),其中 N 是订阅接收通道的客户端数量,M 是订阅模式的总数(任何客户端)。

向给定频道发布消息。

在 Redis 集群中,客户端可以发布到每个节点。集群确保发布的消息根据需要转发,因此客户端可以通过连接到任何一个节点来订阅任何通道。

返回值

整数回复:收到消息的客户端数量。请注意,在 Redis 集群中,只有与发布客户端连接到同一节点的客户端才会包含在计数中。

PUBSUB CHANNELS [pattern]

自 2.8.0 起可用。

时间复杂度: O(N),其中 N 是活动通道的数量,并假设恒定时间模式匹配(相对较短的通道和模式)

列出当前活动的频道。

活动频道是具有一个或多个订阅者(不包括订阅模式的客户端)的 Pub/Sub 频道。

如果pattern指定 no,则列出所有通道,否则如果指定 pattern,则仅列出与指定 glob 样式模式匹配的通道。

集群注意:在 Redis 集群中,客户端可以订阅每个节点,也可以发布到其他每个节点。集群将确保根据需要转发已发布的消息。也就是说,集群中PUBSUB的回复仅报告来自节点的 Pub/Sub 上下文的信息,而不是整个集群。

返回值

数组回复:活动频道列表,可选匹配指定模式。

PUBSUB NUMPAT

自 2.8.0 起可用。

时间复杂度: O(1)

返回客户端订阅的唯一模式的数量(使用PSUBSCRIBE命令执行)。

请注意,这不是订阅模式的客户端计数,而是所有客户端订阅的唯一模式的总数。

集群注意:在 Redis 集群中,客户端可以订阅每个节点,也可以发布到其他每个节点。集群将确保根据需要转发已发布的消息。也就是说,集群中PUBSUB的回复仅报告来自节点的 Pub/Sub 上下文的信息,而不是整个集群。

返回值

整数回复:所有客户端订阅的模式数。

PUBSUB NUMSUB [channel [channel ...]]

自 2.8.0 起可用。

时间复杂度: NUMSUB 子命令的 O(N),其中 N 是请求的通道数

返回指定频道的订阅者数量(不包括订阅模式的客户端)。

请注意,在没有通道的情况下调用该命令是有效的。在这种情况下,它只会返回一个空列表。

集群注意:在 Redis 集群中,客户端可以订阅每个节点,也可以发布到其他每个节点。集群将确保根据需要转发已发布的消息。也就是说,集群中PUBSUB的回复仅报告来自节点的 Pub/Sub 上下文的信息,而不是整个集群。

返回值

数组回复:频道列表和每个频道的订阅者数量。

格式是通道,计数,通道,计数,...,所以列表是扁平的。列出通道的顺序与命令调用中指定的通道顺序相同。

PUBSUB SHARDCHANNELS [pattern]

自 7.0.0 起可用。

时间复杂度: O(N),其中 N 是活动分片通道的数量,并假设恒定时间模式匹配(相对较短的通道)。

列出当前活动的分片通道。

活动分片通道是具有一个或多个订阅者的 Pub/Sub 分片通道。

如果pattern指定 no,则列出所有通道,否则如果指定 pattern,则仅列出与指定 glob 样式模式匹配的通道。

返回的有关活动分片通道的信息是分片级别的,而不是集群级别的。

返回值

数组回复:活动频道列表,可选匹配指定模式。

例子

> PUBSUB SHARDCHANNELS
1) "orders"
PUBSUB SHARDCHANNELS o*
1) "orders"

PUBSUB SHARDNUMSUB [channel [channel ...]]

自 7.0.0 起可用。

时间复杂度: SHARDNUMSUB 子命令的 O(N),其中 N 是请求的通道数

返回指定分片频道的订阅者数量。

请注意,在没有通道的情况下调用此命令是有效的,在这种情况下,它只会返回一个空列表。

集群注意:在 Redis 集群中,集群中PUBSUB的回复仅报告来自节点的 Pub/Sub 上下文的信息,而不是整个集群。

返回值

数组回复:频道列表和每个频道的订阅者数量。

格式是通道,计数,通道,计数,...,所以列表是扁平的。列出通道的顺序与命令调用中指定的分片通道的顺序相同。

例子

> PUBSUB SHARDNUMSUB orders
1) "orders"
2) (integer) 1

PUNSUBSCRIBE [pattern [pattern ...]]

从 2.0.0 开始可用。

时间复杂度: O(N+M),其中 N 是客户端已经订阅的模式数量,M 是系统中(任何客户端)订阅的模式总数。

取消订阅给定模式的客户端,如果没有给定模式,则取消订阅所有模式。

当没有指定模式时,客户端将取消订阅所有先前订阅的模式。在这种情况下,每个未订阅模式的消息都将发送给客户端。

SPUBLISH channel message

自 7.0.0 起可用。

时间复杂度: O(N),其中 N 是订阅接收分片通道的客户端数量。

向给定的分片通道发布消息。

在 Redis Cluster 中,分片通道分配给插槽的算法与将键分配给插槽的算法相同。必须将分片消息发送到拥有分片通道哈希到的插槽的节点。集群确保发布的分片消息被转发到分片中的所有节点,因此客户端可以通过连接到分片中的任何一个节点来订阅分片通道。

有关分片 pubsub 的更多信息,请参阅Sharded Pubsub。

返回值

整数回复:收到消息的客户端数量。

例子

例如,以下命令发布到频道orders,订阅者已经在等待消息。

> spublish orders hello
(integer) 1

SSUBSCRIBE channel [channel ...]

自 7.0.0 起可用。

时间复杂度: O(N),其中 N 是要订阅的分片通道数。

为客户端订阅指定的分片通道。

在 Redis 集群中,将分片通道分配给插槽的算法与将密钥分配给插槽的算法相同。客户端可以订阅覆盖槽(主/副本)的节点以接收发布的消息。

有关分片 pubsub 的更多信息,请参阅Sharded Pubsub。

例子

> ssubscribe orders
Reading messages... (press Ctrl-C to quit)
1) "ssubscribe"
2) "orders"
3) (integer) 1
1) "message"
2) "orders"
3) "hello"

SUBSCRIBE channel [channel ...]

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是要订阅的频道数。

为客户端订阅指定的频道。

一旦客户端进入订阅状态,它就不应该发出任何其他命令,除了额外的SUBSCRIBE、SSUBSCRIBE、PSUBSCRIBE、UNSUBSCRIBE、SUNSUBSCRIBE、 PUNSUBSCRIBE、PING、RESET和QUIT命令。

历史

  • Redis 版本 >= 6.2.0:可以调用 RESET 退出订阅状态。

SUNSUBSCRIBE [channel [channel ...]]

自 7.0.0 起可用。

时间复杂度: O(N),其中 N 是已经订阅频道的客户端数量。

从给定的分片通道中取消客户端的订阅,如果没有给出,则从所有通道中取消订阅。

当没有指定分片通道时,客户端将取消订阅所有之前订阅的分片通道。在这种情况下,每个未订阅的分片通道的消息都将发送到客户端。

注意:全局频道和分片频道需要分别退订。

有关分片 pubsub 的更多信息,请参阅Sharded Pubsub。

UNSUBSCRIBE [channel [channel ...]]

  • 从 2.0.0 开始可用。

  • 时间复杂度: O(N),其中 N 是已经订阅频道的客户端数量。

取消订阅给定频道的客户端,如果没有给定频道,则取消订阅所有频道。

当未指定频道时,客户端将取消订阅所有先前订阅的频道。在这种情况下,每个未订阅频道的消息都将发送给客户端。