该笔记记录redis 发布与订阅的命令。
1.publish
可用版本: >=2.0.0
时间复杂度: O(N+M),其中 N 是频道 channel 的订阅者数量,而 M 则是使用模式订阅(subscribed patterns)的客户端的数量。
命令格式: publish channel message
作用:
将消息message发送到指定的频道channel。
返回值:
接收到message的订阅者数量。
2.subscribe
可用版本: >=2.0.0
时间复杂度: O(N),N为订阅的频道数量
命令格式: subscribe channel [channel ...]
作用:
订阅给定的一个或者多个频道的信息。
返回值:
接收到的信息。
3.psubscribe
可用版本: >=2.0.0
时间复杂度: O(N),N为订阅的模式数量
命令格式: psubscribe pattern [pattern ...]
作用:
订阅一个或多个符合给定模式的频道。
每个模式以 * 作为匹配符,比如 it* 匹配所有以 it 开头的频道( it.news 、 it.blog 、 it.tweets 等等), news.* 匹配所有以 news. 开头的频道( news.it 、 news.global.today 等等),诸如此类。
返回值:
接收到的信息。
4.unsubscribe
可用版本: >=1.0.0
时间复杂度: O(N),N是客户端已订阅的频道数量
命令格式: unsubscribe channel [channel ...]
作用:
指示客户端退订给定的频道。
如果没有频道被指定,也即是,一个无参数的 UNSUBSCRIBE 调用被执行,那么客户端使用 SUBSCRIBE 命令订阅的所有频道都会被退订。在这种情况下,命令会返回一个信息,告知客户端所有被退订的频道。
返回值:
据说在不同客户端会有不同的表现。
5.punsubscribe
可用版本: >=2.0.0
时间复杂度: O(N+M) ,其中 N 是客户端已订阅的模式的数量, M 则是系统中所有客户端订阅的模式的数量。
命令格式: PUNSUBSCRIBE pattern [pattern …]
作用:
指示客户端退订所有给定模式。
如果没有模式被指定,也即是,一个无参数的 PUNSUBSCRIBE 调用被执行,那么客户端使用 PSUBSCRIBE pattern [pattern …] 命令订阅的所有模式都会被退订。在这种情况下,命令会返回一个信息,告知客户端所有被退订的模式。
返回值:
据说在不同客户端会有不同的表现。
6.pubsub
命令格式: pubsub <subcommand> [argument [argument ...]]
可用版本: >=2.8.0
注意: 该命令有3种不同用法,拆分记录!!!
1)
时间复杂度: O(N) , N 为活跃频道的数量
命令格式: pubsub channels [pattern]
作用:
列出当前的活跃频道。
活跃频道指的是那些至少有一个订阅者的频道, 订阅模式的客户端不计算在内。
返回值:
一个由活跃频道组成的列表。
其它:
pattern 参数是可选的:
如果不给出 pattern 参数,那么列出订阅与发布系统中的所有活跃频道。
如果给出 pattern 参数,那么只列出和给定模式 pattern 相匹配的那些活跃频道。
2)
时间复杂度: O(N) , N 为给定频道的数量
命令格式: pubsub numsub [channel-1 ... channel-N]
作用:
批量回复。
返回值:
一个多条批量回复(Multi-bulk reply),回复中包含给定的频道,以及频道的订阅者数量。 格式为:频道 channel-1 , channel-1 的订阅者数量,频道 channel-2 , channel-2 的订阅者数量,诸如此类。 回复中频道的排列顺序和执行命令时给定频道的排列顺序一致。 不给定任何频道而直接调用这个命令也是可以的, 在这种情况下, 命令只返回一个空列表。
3)
时间复杂度: O(1)
命令格式: pubsub numpat
作用:
获取订阅模式的数量
返回值:
一个整数回复(Integer reply)
其它:
这个命令返回的不是订阅模式的客户端的数量, 而是客户端订阅的所有模式的数量总和。