必须做作业三: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、 建立了一套触发机制。
 

 

转载于:https://www.cnblogs.com/jiangweiming/p/9822927.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值