Redis的消息机制 - 发布订阅

发布订阅(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 字典里面


这个字典的键是某个被订阅的频道,而键的值则是一个链表,链表里面记录了所有订阅这个频道的客户端


当某频道有新消息时,就会查找对应的链表,向链表中每个客户端发送通知


Redis的消息机制 - 发布订阅


(2)模式


PSUBSCRIBE pattern


通过 PSUBSCRIBE 命令来订阅所有名称符合模式的频道


例如 订阅所有名称为‘news.’开头的频道


redis> PSUBSCRIBE news.*


模式的订阅关系都保存在 pubsub_patterns 属性里面


pubsub_patterns 属性是一个链表,链表中的每个节点都包含着模式、订阅了此模式的客户端


当某频道发布新消息时,就是查找此链表,对频道名称和模式匹配,如果匹配成功,就向订阅了此模式的客户端发送通知


Redis的消息机制 - 发布订阅


上一篇:从零开始实现简单 RPC 框架 8:网络通信之 Request-Response 模型


下一篇:别问了,我真的不喜欢这个注解!