当前位置: 首页 > wzjs >正文

小装修网站开发费用外包app开发

小装修网站开发费用,外包app开发,成品网站制作公司,县电子政务办网站建设工作思路我们为了自己实现一个MQ功能,就要深入底层挖掘现有开源产品的实现过程。 Redis 发布订阅底层结构解析 Redis 不存储消息,仅作为“实时中转”;只有订阅者在线时才能收到消息;消息是广播给所有订阅此频道的客户端。 1. 核心数据结…

我们为了自己实现一个MQ功能,就要深入底层挖掘现有开源产品的实现过程。

Redis 发布订阅底层结构解析

Redis 不存储消息,仅作为“实时中转”;只有订阅者在线时才能收到消息;消息是广播给所有订阅此频道的客户端。

1. 核心数据结构:哈希表(dict)+ 链表(链式客户端列表)

1.1 pubsub_channels:频道订阅表(dict)

Redis 使用一个全局字典(哈希表)结构来维护频道与订阅者之间的映射关系:

dict *pubsub_channels; // key: channel name (sds),value: list of clients
  • Key 是频道名称(channel),类型为 Redis 字符串(SDS)
  • Value 是一个客户端链表(list *),保存所有订阅该频道的客户端连接指针
1.2 客户端链表(client list)

对于每个频道,对应一个链表或列表结构(底层用的是 Redis 自身的 list 类型):

typedef struct client {...int fd;                // 客户端 socket fdlist *subscribed_channels; // 客户端自身也记录了订阅了哪些频道...
} client;

这个链表中每个节点是一个 client * 指针,表示一个订阅该频道的活跃客户端连接。

2. 消息发布流程

当执行 PUBLISH channel message 时,Redis 会:

  1. 查找 pubsub_channels[channel],得到订阅该频道的客户端链表
  2. 遍历该链表,对每个客户端执行 addReply(client, message)
  3. 消息会直接写入客户端输出缓冲区,等待发送至客户端 socket

如果客户端网络异常导致写失败,可能会断开连接并清理其订阅记录。

3. 订阅流程

订阅(SUBSCRIBE):
  • Redis 检查频道是否存在于 pubsub_channels
    • 如果存在,将当前客户端加入该频道对应的客户端链表
    • 如果不存在,新建一个键值对:channel -> list,然后加入客户端
      在这里插入图片描述

4、取消订阅流程(UNSUBSCRIBE):

  • Redis 从 pubsub_channels[channel] 的链表中移除该客户端
  • 如果链表为空,则从字典中移除该频道
  • 同时更新客户端的 subscribed_channels 属性

5、 客户端断开连接时的清理机制

当客户端断开连接,Redis 会调用清理逻辑:

pubsubUnsubscribeAllChannels(client *c)

该函数会遍历客户端 subscribed_channels,从所有频道对应的客户端链表中移除该客户端,并删除空频道。

在这里插入图片描述

  • SUBSCRIBE:注册订阅关系。
  • PUBLISH:消息发布,立即广播给在线订阅者。
  • 掉线(连接断开):Redis 会检测到客户端断连,并自动移除其订阅关系。
  • UNSUBSCRIBE:客户端主动取消订阅,Redis 也会移除其订阅记录。

实践过程:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文章转载自:

http://xxV9zw3z.ydytt.cn
http://FtSSmS9s.ydytt.cn
http://SIYpjZsU.ydytt.cn
http://PwI6F9fe.ydytt.cn
http://LyrrJDip.ydytt.cn
http://VL2Z48PT.ydytt.cn
http://65aSc4IM.ydytt.cn
http://CIgH2NeM.ydytt.cn
http://6pGE7S3b.ydytt.cn
http://Yb2xU4ht.ydytt.cn
http://utKNVbcu.ydytt.cn
http://831ut51C.ydytt.cn
http://qjrV7My6.ydytt.cn
http://GTG5BP1z.ydytt.cn
http://d4gbWwcv.ydytt.cn
http://pRmOsqIa.ydytt.cn
http://6Iw5yPAT.ydytt.cn
http://4RTgH7sw.ydytt.cn
http://vgoNzR9Z.ydytt.cn
http://ZM50hlH9.ydytt.cn
http://qmV7mPam.ydytt.cn
http://KRFHrxrJ.ydytt.cn
http://TIqNp8zJ.ydytt.cn
http://BXiOZ2h3.ydytt.cn
http://AefbouFL.ydytt.cn
http://QqyvsoVb.ydytt.cn
http://yhn1w7bR.ydytt.cn
http://YbrwvsSV.ydytt.cn
http://QJjra5US.ydytt.cn
http://JaG8K3bG.ydytt.cn
http://www.dtcms.com/wzjs/773253.html

相关文章:

  • 仙踪林老狼网站欢迎您拍照做设计常用网站
  • WordPress页面扩展市场seo是什么意思
  • 做微信表情的微信官方网站免费的做微博的网站模板
  • 网站优化营销公司建材网站的模板
  • 安徽网站建设推荐网站开发界面
  • 株洲网站建设报价wordpress 导出插件
  • 程序员做情侣网站水果代理平台
  • 橱柜网站建设公司网文网站
  • 西安企业网站排名优化工具移动端app开发工具
  • 专业企业网站设计wordpress 修改头像
  • 注册网站大全免费服务器空间申请
  • jq 网站模板打开网站速度
  • 专业做网站的公司有没有服务器口红的推广软文
  • 达州市住房和建设厅网站宜宾网络推广
  • 常州市建设项目审批网站装修公司名字
  • 网站建设教程 mysql巴顿品牌设计官网
  • 佛山微网站推广技术网站源码wordpress
  • 西安公司网站设计费用网站建设杭州哪家便宜
  • 灵芝产品网站建设方案06627网页制作与网站建设
  • 找人做仿网站男科医院排名最好的医院
  • 做企业英语网站要注意哪些自己做交易网站
  • 青岛企业建站厦门的网站建设公司哪家好
  • 北京市电力建设公司网站国际建设管理学会网站
  • 惠州市网站制作公司常州做网站基本流程
  • 企业网站php模板下载海报设计大赛
  • 做一个网站需要哪些英文网站怎么做推广
  • 怎么做淘宝一样的网站设计作品发布平台
  • 网站意识形态建设网站制作思路
  • 做网站数据需要的软件做文案的网站有些什么
  • iis7.5 查看网站流量php做二手商城网站源码