| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis进阶-发布订阅简介 -> 正文阅读 |
|
[大数据]Redis进阶-发布订阅简介 |
1. Redis 发布订阅简介
Redis的 例如,频道 channel1 被三个客户端订阅: 当有新的消息被 2. Redis 发布/订阅使用Redis 有两种发布/订阅模式:
2.1 基于频道(channel)的发布/订阅“发布/订阅” 模式包含两种角色,发布者、订阅者,就像定杂志的客户和杂志。 发布者可以向指定的频道发送消息,订阅者可以订阅一个或者多个频道,所有订阅此频道的订阅者都能收到发布者发布在这个频道上的消息。 类比于我们定杂志和获取杂志内容的全过程,杂志是消息,我们是订阅者,发布者将内容发布在杂志上,我们可以订阅不同的杂志。
发布者发布消息的命令是
这样消息就发送出去了,返回值代表了收到这条消息的订阅者的数量。注意,发出去的消息不会被持久化。也就是有客户端订阅了 channel:1 后只能接收到后续发布到该频道的消息,之前的消息就收不到了。
订阅频道的命令是
执行上面的命令客户端会进入订阅状态,处于此状态的客户端不能使用除了 进入订阅状态之后的客户端可能会收到 3种类型 的回复。每种类型的回复都包含3个值:
消息类型的取值可能是以下3个:
2.2 基于模式(partten)的发布/订阅如果有某个或者某i写模式和这个频道匹配的话,那么所有订阅这个或者这些频道的客户端同样也会收到频道的消息。 下图展示了一个带有频道和模式的例子, 其中 client123、client256 订阅了 twee.shop.* 这个模式,那么当这个模式下的任何一个频道有消息,都会通知给这俩客户端: 2.2.1 基于模式的例子通配符中 ?表示 1个占位符,* 表示任意个占位符(包括0),?* 表示1个以上的占位符。
3. 深入理解基于频道(channel)的发布/订阅如何实现?底层是啥?我们来看一张图: 3.1 数据结构我们可以看到底层是通过字典 (图中的 pubsub_channels)实现的,这个字典就是用于保存订阅频道的信息:
3.2 订阅当客户端调用了 例子:比如客户端 client10086 执行命令 3.3 发布当调用 举个例子:3.1中的图,如果向 channel2 频道发送消息,那么这个频道所对应的链表中的客户端都可以收到消息。 3.4 退订使用 4. 深入理解基于模式(Pattern)的发布/订阅如何实现的?底层是 pubsubPattern 结点的链表。 4.1 数据结构redisServer.pubsub_patterns 属性是一个链表,链表中保存着所有和模式相关的信息:
链表中的每个结点都包含一个 redis.h/pubsubPattern 结构:
每当调用 4.2 订阅就继续拿 client10086 来说吧,它执行 通过遍历整个 pubsub_pattern 链表,程序就可以检查现在所有正在被订阅的模式,以及订阅这些模式客户端信息。 4.3 发布发送信息到模式的工作也是由 4.4 退订使用 5. SpringBoot 结合 Redis发布/订阅实例这个的话,CSDN去一找就可以找到相关的内容。 码云仓库同步笔记,可自取欢迎各位star指正:https://gitee.com/noblegasesgoo/notes
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 11:31:01- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |