必须做作业三:redis项目中观察者模式解析

Redis通过PUBLISH、SUBSCRIBE等命令实现了订阅与发布模式,基本功能就是通过频道将消息发送到订阅了该频道的所有客户端去。每一个客户端可以看成一个观察者,频道则是被观察者。当该频道内接收到一个新消息时,所有订阅该频道的客户端都会收到这条新消息。

 一、实现原理

频道订阅与发布:服务器中结构中有频道订阅字典server.pubsub_channels,字典的键为被订阅的频道,值为一个链表,保存了订阅该频道的所有客户端。同时 ,客户端有一个保存该客户端所订阅的所有频道的链表client.pubsub_channels。

 

频道的订阅与信息发布:

SUBSCRIBE/ PUBLISH命令:让客户端订阅任意数量的频道,每当有新信息发送到被订阅的频道时,信息就会被发送到所有订阅该频道的客户端。

订阅与发布函数如下:

订阅与退订:即将客户端加入服务器的频道订阅字典对应频道的链表中,同时在客户端的频道订阅字典中加入订阅的频道。

 https://github.com/antirez/redis/blob/2edcafb35d3cc2dcc516ba68bb173f7765424eea/src/pubsub.c#L58

频道信息发布:通过遍历服务器的订阅频道字典,查找到订阅了该频道的所有客户端组成的链表,然后将消息发布到链表中的所有客户端去。   
https://github.com/antirez/redis/blob/2edcafb35d3cc2dcc516ba68bb173f7765424eea/src/pubsub.c#L225

二、该项目带来了哪些好处。

1、解决观察者和被观察者直接代码级别耦合也解决两者在物理部署上的耦合。

2、 建立了一套触发机制。
 

猜你喜欢

转载自www.cnblogs.com/jiangweiming/p/9822927.html