标签:订阅 频道 sub Redis pub 链表 机制 日志
发布订阅(pub/sub)是一种消息通信模式,主要目的是解除消息发布者、消息订阅者之间的耦合
pub/sub的特点
(1)时间非耦合
发布者和订阅者不必同时在线,它们不必同时参与交互
(2)空间非耦合
发布者和订阅者不必相互知道对方所在的位置
(3)同步非耦合
发布者/订阅者是异步模式,发布者可不断地生产消息,订阅者则可异步地得到消息通知
pub/sub的使用场景
基于pub/sub的特点,他的典型使用场景就是实时消息系统,比如即时聊天,群聊等功能
还常用作减轻高并发的I/O写压力,例如大量的写日志操作,如果实时写入日志文件或者数据库,会造成I/O超负荷,降低系统性能,那么就可以用pub/sub方式,写日志时先不进行写操作,而是向日志频道发布一条日志消息,然后有一个单独的日志程序来订阅日志频道,异步的读取日志消息写入文件或数据库
redis pub/sub的实现方式
(1)频道
SUBSCRIBE channel
通过 SUBSCRIBE 命令来订阅一个或多个频道
例如
redis> SUBSCRIBE news.it news.sport
那么当其中任何一个频道有新消息的时候,此客户端都会收到
redis 将所有频道的订阅关系都保存在pubsub_channels 字典里面
这个字典的键是某个被订阅的频道,而键的值则是一个链表,链表里面记录了所有订阅这个频道的客户端
当某频道有新消息时,就会查找对应的链表,向链表中每个客户端发送通知
(2)模式
PSUBSCRIBE pattern
通过 PSUBSCRIBE 命令来订阅所有名称符合模式的频道
例如 订阅所有名称为‘news.’开头的频道
redis> PSUBSCRIBE news.*
模式的订阅关系都保存在 pubsub_patterns 属性里面
pubsub_patterns 属性是一个链表,链表中的每个节点都包含着模式、订阅了此模式的客户端
当某频道发布新消息时,就是查找此链表,对频道名称和模式匹配,如果匹配成功,就向订阅了此模式的客户端发送通知
标签:订阅,频道,sub,Redis,pub,链表,机制,日志 来源: https://blog.51cto.com/u_15127579/2727124
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。