redis 发布与订阅

命令列举

  • 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