redis当中的发布与订阅

4000阅读 2评论2019-10-13 stolennnxb
分类:NOSQL

当一个客户端执行SUBSCRIBE命令订阅某个或某些频道的时候,这个客户端与被订阅频道之间就建立起了一种订阅关系,redis将所有频道的订阅关系都保存在服务器状态的pubsub_channels字典里面,这个字典的键是某个被订阅的频道,而键的值则是一个链表,链表里面记录了所有订阅这个频道的客户端:

点击(此处)折叠或打开

  1. struct redisServer{
  2.     //...
  3.     dict *pubsub_channels;
  4.     //...
  5. };
每当有客户端订阅频道时,就会向这个字典里面添加对应的项;而退订频道就是删除对应的项。
而模式的订阅则是保存在一个pubsub_patterns的链表里面
,链表中的每个节点都包含着一个pubsubPattern结构,

点击(此处)折叠或打开

  1. struct redisServer{
  2.     //...
  3.     list *pubsub_patterns;
  4.     //...
  5. };
  6. typedef struct pubsubPattern{
  7.     redisClient *client;
  8.     robj *pattern;
  9. };

发送消息

当一个redis客户端执行PUBLISH 命令将消息message发送给频道channel的时候,服务器将会执行以下两个动作:
1. 将消息message发送给channel频道的所有订阅者
2. 搜索模式链表,发送message给所有匹配pattern的客户端

上一篇:redis集群之进阶
下一篇:redis当中的事务

文章评论