Redis ——发布订阅

news2024/11/5 20:00:09

问题引入:

服务器A、B、C、D,客户端:C1,C2,C3,C4;

客户端基于集群聊天服务器的负载均衡分配;

C1 被分配到A,C2 被分配到B,C3 被分配到C,C4 被分配到D;

C1->C3; C3->C1;

C2->C3; C4->C1;

跨服务器间的消息通信问题,使用Redis 发布订阅,

则无需多服务器强连接(服务器机数量*(服务器机器数量-1)次连接,且不便于服务器扩展)浪费资源;

底层结构:

发布订阅:基于哈希表链表结构实现

map结构key值保存用户订阅的兴趣事件,而value保存发布者对象信息,以链表的形式连接对同一事件感兴趣的对象,当消息队列中出现关于订阅事件的发布信息时,Redis可以快速的将该信息按照以key值对应的value链表为订阅的转发顺序;

基于上述情况:

服务器A、服务器B将订阅(SUBSCRIBE) C3 事件;

服务器C、服务器D将订阅(SUBSCRIBE) C1事件;

订阅:Redis 在内部map结构中查找订阅事件,找到则将订阅对象加入链表序列,否则创建该key值,并将服务器加入value链表

eg: 服务器A 订阅C3 对象的事件,Redis先在Map结构查找C3事件是否存在,不存在创建C3 为key,并将服务器A 插入value中的链表结构

发布:

当某服务器在Redis消息队列中发布(PUBLISH)事件时,Redis将在map结构中找到订阅该事件对应的服务器链表,进行转发。

eg:当消息队列中由服务器发布关于C1 事件,Redis 查找C1为key对应的value 链表,并将C1事件转发给链表中的服务器C、服务器B。

观察者模式:

定义一种(被观察类)对多(观察类)的关系,让多个观察对象同时监听一个被观察对象,被观察 对象状态发⽣变化时,会通知所有的观察对象,使他们能够更新自己的状态。

观察者模式中存在两种角色:

观察者:内部包含被观察者对象,当被观察者对象的状态发⽣变化时,更新状态。

接收通知更新状态->被观察者:内部包含了所有观察者对象,当状态发生变化时通知所有的观察者更新自己的状态。

场景: 当⼀个对象的改变需要同时改变其他对象,且不知道具体有多少对象有待改变时,应该考虑观察者模式; 一个抽象模型其中一方面依赖于另一方面,这时以观察者模式将这两者封装在独立的对象中使它们各自地改变和复用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2233781.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【漏洞复现】某平台-QRcodeBuildAction-LoginSSO-delay-mssql-sql注入漏洞

《Java代码审计》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484219&idx1&sn73564e316a4c9794019f15dd6b3ba9f6&chksmc0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene21#wechat_redirect 《Web安全》h…

API网关 - JWT认证 ; 原理概述与具体实践样例

API网关主要提供的能力,就是协议转换,安全,限流等能力。 本文主要是分享 如何基于API网关实现 JWT 认证 。 包含了JWT认证的流程,原理,与具体的配置样例 API网关认证的重要性 在现代Web应用和微服务架构中&#x…

Excel:vba实现批量插入图片

实现的效果: 实现的代码: Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Pic As ObjectDim Name As String 防止表格里面有脏数据Cells.Clear 遍历工作表中的每个图…

什么是 OpenTelemetry?

OpenTelemetry 定义 OpenTelemetry (OTel) 是一个开源可观测性框架,允许开发团队以单一、统一的格式生成、处理和传输遥测数据(telemetry data)。它由云原生计算基金会 (CNCF) 开发,旨在提供标准化协议和工具,用于收集…

电商美工必备神器:千鹿 AI 轻松解决场景图主图尺寸问题

前言 在电商领域,美工在做详情页设计时,常常会为图片尺寸问题而苦恼。而 AI 扩图在此刻就成为了美工们的得力助手。其中,场景图主图太小是一个让人颇为头疼的难题。千鹿 AI 作为一款强大的工具,能够一键将图片改成指定尺寸&#…

关于 PDF 抽取的吐槽

今天一下午写了8,9个 PDF 抽取的脚本。最后又回归最开始简单的模式了,要疯了,谁懂啊。 我是下午的工作是这样的(我是这么疯的) 最开始使用最简单的策略,先使用 PyPDF2.PdfReader(file) 读取文件,然后在每一页使用 pag…

无人机避障——(局部规划方法)DWA(动态窗口法)

传统的DWA算法更加倾向于车辆等差速无人车,旋翼无人机是全速的,全向的。 全局路径是通过A*算法生成的 局部路径规划效果: DWA算法效果: 过程图: 完整过程: PID算法效果: 过程图&#xff1a…

知识吾爱纯净版小程序系统 leibiao SQL注入漏洞复现(XVE-2024-30663)

0x01 产品简介 知识吾爱纯净版小程序系统是一款基于微信小程序平台开发的知识付费应用,旨在帮助用户快速建立自己的知识付费平台,实现支付变现和流量主收益。它提供了简洁明了的用户界面和良好的用户体验,同时注重用户隐私保护,确保用户信息的安全存储和传输。 0x02 漏洞…

基于web的便捷饭店点餐小程序的设计与实现(lw+演示+源码+运行)

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安全…

全面解析:深度学习技术及其应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 全面解析:深度学习技术及其应用 全面解析:深度学习技术及其应用 全面解析:深度学习技术及其应…

项目实战使用gitee

1.创建本地仓库 2.进行提交到本地仓库 创建仓库后在idea中会显示图标,点击绿色的√进行快速提交 3.绑定远程仓库 4.番外篇-创建gitee仓库 注意不要勾选其他

【鸿蒙新闻】10月29日警用鸿蒙开发者大会在北京胜利召开,开启智慧应用新时代!

10月29日,在公安部科技信息化局、公安部装备财务局指导下,由公安部第一研究所主办,鼎桥通信技术有限公司、OpenHarmony生态委员会及公共安全专委会协办的警用鸿蒙开发者大会在北京胜利召开。会议以“拥抱警鸿创新生态 开启智慧应用新时代”为…

Spring Boot 3.3 【九】Redis 的五种数据结构深入浅出(String List Set Hash Zset)

如果觉得本文能够帮到您,请关注🌟、点赞👍、收藏📚,让这份美好延续下去! 一、Redis 数据结构简介 在现代应用开发中,高效的数据存储和管理是构建强大系统的关键。Redis 作为一种高性能的内存数…

命令行参数、环境变量、地址空间

命令行参数: int main(int argc, char *argv[ ]),main的参数可带可不带。argc参数通常代表后面的char *argv的元素个数有多少。 在linux中会把输入的字符串存到char *argv[ ]中,在数组的结尾为NULL。 命令行参数可以让同一个程序可以通过不同…

持续优化,构建更好地 auto git commit 体验

几个月前,受到一篇推文的启发 https://x.com/mtrainier2020/status/1802941902964277379 ,我突然想到可以借助 git alias 添加一些小命令,加速我的 git workflow 流程,于是我花了两个小时的时间进行工程封装,并发布了 …

C#-类:声明类、声明类对象

一:类的声明 class 类名 {//特征——成员变量//行为——成员方法//保护特征——成员属性//构造函数和析构函数//索引器//运算符重载//静态成员 }类名:帕斯卡 同一个语句块中的不同类 不能重名 二:声明类对象 2.1 类的声明 ≠ 类对象的声…

【学习enable_if模板, 学习unqiue_str 删除操作】

enable_if 是 C 标准库中的一个模板结构体,它用于条件编译和 SFINAE(Substitution Failure Is Not An Error)。enable_if 的主要作用是通过条件编译来控制模板的实例化,从而实现条件编译和 SFINAE。 1. enable_if 的基本用法如下…

AIGC产品经理高频面试题❗️看完的都拿高薪了

🤔️如果你正在考虑找AI产品经理相关的工作, 建议好好准备这些面试问题, 如果想要更加详细的回答可以直接询问海螺AI哦! 谁用了不说一句: AI真的太适合准备面试啦(🙀尖叫抛开 之后会分享更多岗位的面试题目, 以及如何用AI准备面试的tips哦! 大模型&A…

【VS+QT】联合开发踩坑记录

最新更新日期:2024/11/05 0. 写在前面 因为目前在做自动化产线集成软件开发相关的工作,需要用到QT,所以选择了VS联合开发,方便调试。学习QT的过程中也踩了很多坑,在此记录一下,提供给各位参考。 1. 环境配…

Windows下安装Maven并配置环境

在Windows下安装Maven、修改阿里云仓库、修改本地仓库路径,并为IntelliJ IDEA配置Maven,可以按照以下步骤进行操作: 1. 安装Maven 下载Maven: 访问 Apache Maven官网,下载最新版本的Maven二进制包(zip格式…