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.*主题后,在新的客户端发布消息可以正常打印。

学海无涯苦作舟!!!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubuntu 7z解压rar文件报错:unsupported method message

问题说明 最近项目需要支持线上上传rar格式,7z来解压缩入库。开发测试过程中发现使用以下命令解压报错, 7z x FileImportTest01.rar -p"123456" -o/home/download -y文件目录内容已列出,但无法解压文件!!! 仔细检查命令没有问题…

流网络等价性证明:边分解后的最大流保持不变

流网络等价性证明:边分解后的最大流保持不变 问题描述证明思路伪代码C 代码实现解释问题描述 在流网络中,证明将一条边分解为两条边所得到的是一个等价的网络。具体来说,假设流网络 $ G $ 包含边 $ (u, v) $,我们以如下方式创建一个新的流网络 $ G’ $: 创建一个新结点 $…

编译问题 fatal error: rpc/rpc.h: No such file or directory

在编译一些第三方软件的时候,会经常遇到一些文件识别不到的问题,这里整理下做个归总。 目前可能的原因有(排序分先后): 文件不存在;文件存在但路径识别不了;…… 这次以常见的编译lmbench测试…

小皮面板(PHPSTUDY)配置多个域名或IP

问题描述 小皮面板默认采用nginx的静态部署,按照使用nginx的习惯只需要额外添加一个server即可,但是会发现直接往配置文件里添加新的server是不生效的,小皮的官网论坛几乎已经停止维护,因此资料较少,原本也没有仔细使…

《AI行政管理:开启高效治理新时代》

一、引言 AI 行政管理能力的定义和重要性 AI 行政管理能力是指人工智能在行政管理领域的应用能力。它涵盖了多个方面,包括政府决策支持、公共服务优化、行政流程自动化、社会治理与公共安全以及政府内部管理等。在当今时代,AI 行政管理能力具有至关重要…

Golang使用etcd构建分布式锁案例

在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统。分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要。它有助于维护一致性,防止竞争条件,并确保在任何给定时间只有一个进程独占访问资源。 我们将使用Go作为编程语言&am…

数字IC后端实现常见的physical only cell都有哪些?如何添加这些cell?

数字IC后端实现阶段常见功能cell有哪些?比如AND,AOI,NAND等。 physical cell有哪些?都是干什么用的? 数字后端零基础入门系列 | Innovus零基础LAB学习Day9 (1) well tap cells:防止…

【NVIDIA orin nx 安装ultralytics yolov11】

注意:不同用户安装的python可能会在不同的路径,因此不同的pip管理会导致安装的 torch和torchvision会在不同的路径下 记得区分用户来运行yolo 一、确认系统 JetPack 版本 此处使用5.1.1 1、查看JetPack 版本 jtop二、安装 ultralytics、pytorch、torchvision、onnxruntime…

CANDENCE:过孔设置 及 如何放置过孔

过孔设置 1、 2、 3、弹出如下对话框 4、选择需要的过孔尺寸,双击 5、调节过孔优先级 6、点击 ”OK“ 完成设置 放置过孔 及 过孔选择 在PCB设计窗口 切换到走线模式 走线时,侧边栏可以选择过孔尺寸 选择好后, 双击左键放置过孔 也…

React 和 Vue _使用区别

目录 一、框架介绍 1.Vue 2.React ?二、框架结构 1.创建应用 2.框架结构 三、使用区别 1.单页面组成 2.样式 3.显示响应式数据 4.响应式html标签属性 5.控制元素显隐 6.条件渲染 7.渲染列表 react和vue是目前前端比较流行的两大框架,前端程序员应该将…

基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究|文献速递-生成式模型与transformer在医学影像中的应用速递

Title 题目 Mammography classification with multi-view deep learning techniques:Investigating graph and transformer-based architectures 基于多视角深度学习技术的乳腺X线分类:图神经网络与Transformer架构的研究 01 文献速递介绍 乳腺X线检查是乳腺癌…

SQL项目实战与综合应用——项目设计与需求分析

项目设计与需求分析是软件开发过程中的核心环节,尤其在涉及数据库的应用时,良好的设计将直接影响到项目的可扩展性、性能和维护性。本文将深入探讨数据库设计的最佳实践,结合 C 与 SQL 的实际应用场景,涵盖项目需求收集、数据库设…

【HarmonyOS学习日志(13)】计算机网络之TCP/IP协议族(二)

文章目录 TCP/IP协议族ARPDNS标志字段:协商具体的通信方式和反馈通信状态DNS查询问题的格式资源记录(Resource Record, RR)格式:被用于应答字段、授权字段和额外信息字段 IP协议IP服务的特点无状态无连接不可靠 IP头部结构IPv4头部…

GO并发编程

一、并发编程初体验和问题 关于 Go 语言和线程的关系 Go 语言中存在线程。Go 语言的并发模型是基于 Goroutine、Processor(P)和 Machine(M,操作系统线程)的 GMP 模型。Goroutine 是 Go 语言中轻量级的执行单元&#xf…

初次使用uniapp编译到微信小程序编辑器页面空白,真机预览有内容

uniapp微信小程序页面结构 首页页面代码 微信小程序模拟器 模拟器页面为空白时查了下,有几个说是“Hbuilder编译的时候应该编译出来一个app.js文件 但是却编译出了App.js”,但是我的小程序结构没问题,并且真机预览没有问题 真机调试 根据defi…

车载语音的台架和实车测试分析

在车载测试过程中免不了要对一些特殊的业务进行深度的专项测试。比如语音识别,这个技术在汽车上也不算什么新技术,但是涉及到用户的使用,更加涉及操作的安全性,所以这块测试还是很重要的。 那么要做好语音识别的业务专项测试&…

【蓝桥杯每日一题】砍竹子

砍竹子 2024-12-7 蓝桥杯每日一题 砍竹子 STL 贪心 题目大意 这天, 小明在砍竹子, 他面前有 nn 棵竹子排成一排, 一开始第 ii 棵竹子的 高度为 h i h_i hi​. 他觉得一棵一棵砍太慢了, 决定使用魔法来砍竹子。魔法可以对连续的一 段相同高度的竹子使用, 假设这一段竹子的高度为…

Vue实现购物车(纯操作数据,不操作dom)注意:自己引入Vue.js哦

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title>&l…

ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统源码

二手物品回收小程序 一款基于ThinkPHP开发的原生微信小程序二手物品回收小程序管理系统。支持线上下单、免费上门取件、评估价格等功能。提供全部无加密源码&#xff0c;支持私有化部署。

C#实现一个HttpClient集成通义千问-多轮对话功能实现

多轮对话功能实现 视频教程实现原理消息的类型 功能开发消息类修改请求体修改发送请求函数修改用户消息输入 多轮对话的token消息完整文档消息类型 视频教程 .NetAI开发入门HttpClient实现通义千问集成-多轮对话功能实现 实现原理 一直保留更新messages 现在设置的meessages只…