Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1851155
  • 博文数量: 184
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2388
  • 用 户 组: 普通用户
  • 注册时间: 2016-12-21 22:26
个人简介

90后空巢老码农

文章分类

全部博文(184)

文章存档

2021年(26)

2020年(56)

2019年(54)

2018年(47)

2017年(1)

我的朋友

分类: NOSQL

2019-10-13 20:30:03

当一个客户端执行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的客户端

阅读(3986) | 评论(2) | 转发(0) |
0

上一篇:redis集群之进阶

下一篇:redis当中的事务

给主人留下些什么吧!~~

qwert101020202019-10-16 14:11:30

的方法对方付费的

qwert101020202019-10-16 14:10:45

强吻强吻强吻