Redis篇-4--原理篇3--Redis发布/订阅(Pub/Sub)

1、概述

Redis 发布/订阅(Publish/Subscribe,简称 Pub/Sub)是一种消息传递模式,允许客户端订阅一个或多个通道(channel),并接收其他客户端发布到这些通道的消息。

2、Redis 发布/订阅的主要概念

发布者(Publisher):发布者可以向指定的通道发送消息。每个消息会被发送给所有订阅了该通道的客户端。

订阅者(Subscriber):订阅者可以订阅一个或多个通道,并接收订阅通道的消息。订阅者不会直接与发布者交互,它们只负责监听通道中的消息。

通道(Channel):通道是消息传递的媒介。发布者将消息发布到特定的通道,订阅者从这些通道接收消息。通道的名字是一个字符串,可以是任意的标识符。

3、redis发布订阅的关键特性

多播(Multicasting):当发布者向某个通道发布消息时,所有订阅了该通道的客户端都会收到这条消息。这意味着每个订阅者都可以独立地接收到相同的消息,而不需要与其他订阅者竞争。

无状态:Redis 本身不保存消息的历史记录。一旦消息被发布并分发给所有订阅者,它就会被丢弃。因此,如果某个订阅者在消息发布时没有连接,它将无法接收到该消息。这与消息队列(如 RabbitMQ 或 Kafka)不同,后者通常会保留消息直到所有订阅者都处理完毕。

模式匹配:Redis 支持基于模式的订阅。订阅者不仅可以订阅具体的通道,还可以订阅符合某些模式的通道。例如,订阅者可以订阅所有以 news.* 开头的通道,从而接收所有匹配该模式的消息。

轻量级:Redis 的发布/订阅机制非常轻量级,适合用于简单的实时通知和事件驱动的应用程序。它不提供复杂的排队、持久化或确认机制,因此不适合用于需要可靠消息传递的场景。

4、Redis 发布/订阅的命令

(1)、SUBSCRIBE channel [channel …]
作用:订阅一个或多个通道。订阅后,客户端会进入订阅模式,只能接收消息,不能再执行其他命令(除了 UNSUBSCRIBE 和 PING)。
示例:(订阅news.sports和news.tech两个主题)

 SUBSCRIBE news.sports news.tech

在这里插入图片描述
订阅主题后,打印了相关信息。

(2)、UNSUBSCRIBE [channel [channel …]]
作用:取消订阅一个或多个通道。如果不指定通道,则取消订阅所有通道。
示例:(取消订阅news.sports这个主题)

UNSUBSCRIBE news.sports

(3)、PSUBSCRIBE pattern [pattern …]
作用:订阅符合某个模式的通道。模式可以包含通配符 *?,类似于 Unix shell 的文件名匹配规则。
示例:(订阅news.*格式的全部主题,之后只要发布new.开头的主题得消息,这个订阅者就都能接收到)

 PSUBSCRIBE news.*

(4)、PUNSUBSCRIBE [pattern [pattern …]]
作用:取消订阅符合某个模式的通道。如果不指定模式,则取消订阅所有模式。
示例:(取消订阅news.*格式的全部主题)

 PUNSUBSCRIBE news.*

(5)、PUBLISH channel message
作用:向指定的通道发布一条消息。所有订阅了该通道的客户端都会收到这条消息。
返回值:返回收到该消息的订阅者数量。
示例:(向news.sports主题中发布消息)

 PUBLISH news.sports "Breaking sports news: Team A wins!"

在这里插入图片描述
可以看到在订阅了news.*主题后,在新的客户端发布消息可以正常打印。

学海无涯苦作舟!!!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第六届地博会世界酒中国菜助力广州龙美地标美食公司推动地标发展

第六届知交会暨地博会:世界酒中国菜助力广州龙美地标美食公司推动地标产品创新发展 2024年12月9日至11日,第六届粤港澳大湾区知识产权交易博览会暨国际地理标志产品交易博览会在中新广州知识城盛大启幕。本届盛会吸引了全球众多知识产权领域的专业人士和…

【CSS in Depth 2 精译_074】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(下):行内元素的间距设置

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 12 章 CSS 排版与间距】 ✔️ 12.1 间距设置 12.1.1 使用 em 还是 px12.1.2 对行高的深入思考12.1.3 行内元素的间距设置 ✔️ 12.2 Web 字体12.3 谷歌字体 文章目…

基于FPGA的智能电子密码指纹锁(开源全免)

基于FPGA的智能电子密码指纹锁 一、功能描述硬件资源需求 二、整体框架知识准备AS608指纹模块4*4数字键盘模块 三、Verilog代码实现以及仿真验证1.AS608_data模块2.check_hand模块3.four_four_key模块4.check_mima模块5.change_mima模块6.seg_ctrl模块7.uart_top模块8.key_debo…

汽车网络安全 -- IDPS如何帮助OEM保证车辆全生命周期的信息安全

目录 1.强标的另一层解读 2.什么是IDPS 2.1 IDPS技术要点 2.2 车辆IDPS系统示例 3.车辆纵深防御架构 4.小结 1.强标的另一层解读 在最近发布的国家汽车安全强标《GB 44495》,在7.2节明确提出了12条关于通信安全的要求,分别涉及到车辆与车辆制造商云平台通信、车辆与车辆…

【C++】快速排序详解与优化

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯快速排序的核心思想1. 算法原理2. 算法复杂度分析时间复杂度空间复杂度 💯快速排序的代码实现与解析代码实现代码解析1. 递归终止条件2. 动态分配子数组3. 分区…

Redis从入门到进阶(总结)

以下内容均以CentOS7为背景。 一、Redis安装及启动 mysql(读:2000/s;写:600/s) redis(读:10w/s;写:8w/s)通过官方给出的数据单机并发可以达到10w/s&#xf…

设计模式——单例模式和工厂模式

单例模式:一个类只创建一个类对象(节省内存减少类对象数量,一个类对象多次重复使用) 格式: class a: pass ba() z1b z2b #z1和z2为同一个类对象 工厂模式:(大批量创建具体的类对象,统一类对象入口便于维护&#xf…

Flume基础概念

目录 作用组件构成ClientFlowAgentSourceSinkEvent 和Log4j的区别与定位事务传出流程输入到sourcesource端输入Channel 接收输入到SinkSink输出 作用 Flume可以从各种来源(如日志文件、消息队列、网络数据、文件系统、数据库等)收集数据,并将…

PHP语法学习(第七天)-循环语句,魔术常量

老套路了,朋友们,先回忆昨天讲的内容PHP语法学习(第六天)主要讲了PHP中的if…else语句、关联数组以及数组排序。 想要学习更多PHP语法相关内容点击“PHP专栏!” 下列代码都是在PHP在线测试运行环境中得到的!! 还记得电…

生成:安卓证书uniapp

地址: https://ask.dcloud.net.cn/article/35777 // 使用keytool -genkey命令生成证书: 官网: keytool -genkey -alias testalias -keyalg RSA -keysize 2048 -validity 36500 -keystore test.keystore ----------------------------------…

Vue.js:代码架构组成与布局设置

前言:最近在弄一个开源的管理系统项目,前后端分离开发,这里对前端的Vue框架做一个总结,有遗漏和错误的地方欢迎大家指出~ 🏡个人主页:謬熙,欢迎各位大佬到访❤️❤️❤️~ 👲个人简介…

【优选算法-滑动窗口】长度最小的子数组、无重复字符的最长子串、最大连续1的个数、将x减为0的最小操作数、水果成篮

一、长度最小的子数组 题目链接: 209. 长度最小的子数组 - 力扣(LeetCode) 题目介绍: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, .…

appium学习之二:adb命令

1、查看设备 adb devices 2、连接 adb connect IP:端口 3、安装 adb install xxx.apk 4、卸载 adb uninstall 【包名】 5、把对应目录下的1.txt文件传到手机sdcard下 adb push 1.txt /sdcard 6、进入对应的设备里 adb shell 7、切入sdcard目录 cd /sdcard 8、ls 查…

算法——差分

差分可以看作是前缀和的逆运算,前缀和可以帮我们快速得到某个区间的和,而差分就是我们将原数组看作是一个前缀和数组(q[])我们去构造一个差分数组(c[]) 一维差分 使存在如下关系: q[i] c[1]…

使用 EasyExcel 提升 Excel 处理效率

目录 前言1. EasyExcel 的优点2. EasyExcel 的功能3. 在项目中使用 EasyExcel3.1 引入依赖3.2 实体类的定义与注解3.3 工具类方法的实现3.4 在 Controller 中使用 4. 总结5. 参考地址 前言 在日常开发中,Excel 文件的处理是不可避免的一项任务,特别是在…

健康管理系统(Koa+Vue3)

系统界面(源码末尾获取) 系统技术 Vue3 Koa Nodejs Html Css Js ....... 系统介绍 系统比较简单,轻轻松松面对结业课堂作业.采用的是基于nodejs开发的Koa框架作为后端,采用Vue框架作为前端,完成快速开发和界面展示. 系统获取 啊啊啊宝/KoaVue3https://gitee.com/ah-ah-b…

python进阶-05-利用Selenium来实现动态爬虫

python进阶-05-利用Selenium来实现动态爬虫 一.说明 这是python进阶部分05,我们上一篇文章学习了Scrapy来爬取网站,但是很多网站需要登录才能爬取有用的信息,或者网站的静态部分是一个空壳,内容是js动态加载的,或者人机验证&…

day10性能测试(2)——Jmeter

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、LoadRunner vs Jmeter 1.1 LoadRunner 1.2 Jmeter 1.3 对比小结 2、Jmeter 环境安装 2.1 安装jdk 2.2 安装Jmeter 2.3 小结 3、Jmeter 文件目录结构 4、Jmeter默认配置修改 5、Jmeter元件、组…

架构15-服务网格

零、文章目录 架构15-服务网格 1、透明通信的涅槃 (1)服务网格 概念 服务网格是一种处理程序间通信的基础设施,主要由数据平面和控制平面组成。它通过边车代理和控制程序管理程序间的通信,弥补了容器编排系统对分布式应用细粒…

day08 接口测试(4)知识点完结!!

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、postman读取外部数据文件(参数化) 1.1 数据文件简介 1.2 导入外部数据文件 1.2.1 csv文件 1.2.2 导入 json文件 1.3 读取数据文件数据 1.4 案例 1.5 生成测试报告 2、小…