redis 发布与订阅
其他
2018-08-08 18:20:11
阅读次数: 0
命令列举
SUBSCRIBE <channel [channel]>
:订阅频道,以接收发送到这个频道的消息
PUBLISH <channel> <message>
: 该命令会向频道发送消息,所有订阅频道的订阅者都会收到消息
PSUBSCRIBE <channel_pattern>
:这是接受正则表达式的SUBSCRIBE命令,可以订阅符合某个模式的所有频道
- UNSUBSCRIBE:退订,命令格式与SUBSCRIBE类似,作用与其相反
- PUNSUBSCRIBE:退订模式,命令格式与PSUBSCRIBE类似,作用于其相反
PUBSUB CHANNELS [pattern]
:返回服务器当前被订阅的频道,pattern可选,表示符合pattern模式的频道,不写则返回所有频道
PUBSUB NUMSUB <channel> [...<channel>]
:返回指定channel的订阅客户端数量,channel可输入多个
PUBSUB NUMPAT
:返回被订阅模式的数量,没有参数
实现
- 频道的订阅与退订,是在操作redisServer结构体内的字典
pubsub_channels
,字典的键是被订阅的频道,值是所有客户端的链表,每次执行SUBSCRIBE命令和UNSUBSCRIBE都是操作字典
- 模式的订阅与退订,是在操作redisServer结构体内的链表
pubsub_patterns
,元素是pubsubPattern
结构体,该结构体包含订阅的频道模式和客户端。每次执行PSUBSCRIBE和PUNSUBSCRIBE命令,都是对链表进行增删,链表没有去重
- 发送消息:通过channel获取
pubsub_channels
的值,也就是一个客户端的链表,给其中所有的客户端发送消息;此外,还需遍历pubsub_patterns
,匹配所有符合的模式,并给对应的客户端发送消息
- PUBSUB CHANNELS返回所有被订阅频道:是通过遍历
pubsub_channels
字典的键实现的,所以在pubsub_patterns
中的并不返回
- PUBSUB NUMSUB:通过遍历
pubsub_channels
字典各指定channel对应链表的长度返回
- PUBSUB NUMPAT:返回
pubsub_patterns
的长度
转载自blog.csdn.net/lqadam/article/details/79429608