Redis 发布订阅 总结

前言


 相关系列

  • 《Redis & 目录》(持续更新)
  • 《Redis & 发布订阅 & 源码》(学习过程/多有漏误/仅作参考/不再更新)
  • 《Redis & 发布订阅 & 总结》(学习总结/最新最准/持续更新)
  • 《Redis & 发布订阅 & 问题》(学习解答/持续更新)
     

 参考文献

  • 《Redis发布订阅以及应用场景介绍》
     
     

概述


    Redis的发布/订阅机制是一种消息传递机制。与传统的发布/订阅机制相同,Redis的发布/订阅机制也由以下四部分组成:

  • message @ 消息:用于在客户端之间传递的内容;
  • producer/publisher @ 生产者/发布者:发布消息的客户端;
  • consumer/subscriber @ 消费者/订阅者:接收消息的客户端;
  • channel @ 频道:用于传递消息的桥梁/介质,发布者可通过频道发布消息,而订阅了频道的订阅者可接收到通过其发布的消息。

在这里插入图片描述
    Redis发布/订阅机制不会持久化消息。Redis的发布/订阅机制不会保存消息,因此在频道不存在/频道没有接收者时消息会直接被丢弃。此外即使有部分订阅者在宕机后又重复恢复,其也无法再接收到宕机期间发布的消息。

    Redis发布/订阅机制无需显式创建频道。Redis发布/订阅机制的频道会在首个订阅者订阅频道时自动创建,并在所有订阅者都退订时自动销毁,因此频道不存在与频道无订阅者在Redis发布/订阅机制中其实是一个概念。此外由于发布/订阅机制并不会保存消息,因此Redis也压根没有为频道创建具体的结构实例,仅仅只是为其保存/维护了一个频道名称/份订阅者名单而已。
 
 

使用


 发布

  • PUBLISH channel message:向指定频道发布指定消息。
        ------------------------- 入参 -------------------------
        channel @ 频道:消息发布的频道,订阅该频道的客户端可接收到消息,而频道不存在/无订阅者则指定消息直接丢失;
        message @ 消息:消息。
// ---- 向频道"a_1/a_2/b_3/c_4/d_5"发布消息"message",并返回接收到消息的订阅者总数"1/1/1/1/0"。
> PUBLISH a_1 message
1
> PUBLISH a_2 message
1
> PUBLISH b_3 message
1
> PUBLISH c_4 message
1
> PUBLISH d_5 message
0

 

 订阅

  • SUBSCRIBE channel [channel …]:订阅指定频道集,订阅后可收到通过指定频道集发布的消息。
        ------------------------- 入参 -------------------------
        channel [channel …] @ 频道集:渠道集,多个指定频道之间使用“ ”分割。
// ---- 订阅"a_1/a_2"频道,并返回成功订阅的频道总数"2"。
> SUBSCRIBE a_1 a_2
2
// ---- 频道"a_1"接收到消息"message"。
a_1
message
// ---- 频道"a_2"接收到消息"message"。
a_2
message
  • PSUBSCRIBE pattern [pattern …]:订阅指定的模式(频道)集,订阅后可收到通过指定模式集发布的消息。
        ------------------------- 入参 -------------------------
        pattern [pattern …] @ 模式集:模式集,使用“”作为全通配符,多个模式之间使用“ ”分割。*
// ---- 订阅符合"b_*/c_*"频道,并返回成功订阅的模式总数"2"。
> PSUBSCRIBE b_* c_*
2
// ---- 符合模式"b_*"的频道"b_3"接收到消息"message"。
b_*
b_3
message
// ---- 符合模式"c_*"的频道"c_4"接收到消息"message"。
c_*
c_4
message

 

 检查

  • PUBSUB CHANNELS [pattern]:获取符合指定模式的渠道集,不包含通过{PSUBSCRIBE}指令订阅的模式集。
        ------------------------- 入参 -------------------------
        [pattern] @ 模式:模式,使用“”作为全通配符。*
// ---- 获取符合模式"a_*"的渠道集,并返回渠道"a_1/a_2"。
> PUBSUB CHANNELS a_*
a_1
a_2
// ---- 获取符合模式"b_*"的渠道集,并未返回渠道,因为上文未订阅该模式的渠道集。
> PUBSUB CHANNELS b_*
  • PUBSUB NUMSUB [channel-1 …]:获取指定渠道集的订阅者总数,不包含通过{PSUBSCRIBE}指令订阅的模式集。
        ------------------------- 入参 -------------------------
        [channel-1 …] @ 渠道集:渠道集。
// ---- 获取渠道"a_1/a_2/b_*/c_*"的订阅者总数。
> PUBSUB NUMSUB a_1 a_2 b_* c_*
// ---- 渠道"a_1/a_2"的订阅者总数为"1/1"。
a_1
1
a_2
1
// ---- 渠道"b_*/c_*"的订阅者总数为"0/0",因为上文未订阅该渠道。
b_*
0
c_*
0
  • PUBSUB NUMPAT:获取已订阅的模式总数。
// ---- 获取已订阅的模式总数"2",即上文订阅的模式"b_*/c_*"。
> PUBSUB NUMPAT
2

 

 退订

  • PUNSUBSCRIBE [pattern …]:退订指定模式集。该指令可能因为客户端调用{PSUBSCRIBE}指令并进入监听状态而无法使用。
        ------------------------- 入参 -------------------------
        [pattern …] @ 模式集:模式集,使用“”作为全通配符,多个模式之间使用“ ”分割。不传则退订当前客户端使用{PSUBSCRIBE}指令订阅的所有模式。*
  • UNSUBSCRIBE [channel …]:退订指定渠道集。该指令可能因为客户端调用{SUBSCRIBE}指令并进入监听状态而无法使用。
        ------------------------- 入参 -------------------------
        [channel …] @ 渠道集:渠道集,多个渠道之间使用“ ”分割。不传则退订当前客户端使用{SUBSCRIBE}指令订阅的所有渠道。

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

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

相关文章

回顾项目测试全过程,测试如何回答“测完了吗?”

“测完了吗?” 是系统测试岗位同学经常被问到的问题,提问的人可能是合作的研发, 合作的产品经理,甚至是项目的业务方,也有可能是测试自己。 这个问题至少有两层意思,不仅问新功能测试进度是否完成&#xf…

qt QMediaPlaylist

QMediaPlaylist 是 Qt Multimedia 模块中的一个类,用于管理媒体文件的播放列表。它提供了一种方便的方式来组织和控制多媒体内容的播放,如音频和视频文件。 主要方法 QMediaPlaylist(00bject *parent nullptr):构造一个新的媒体播放列表对象。void add…

论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)

目录 1.GAN:Generative Adversarial Nets(生成对抗网络)1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O…

【Java网络编程】从套接字(Socket)概念到UDP与TCP套接字编程

目录 网络编程 1.socket套接字 2.udp数据报套接字编程 DatagramSocket API DatagramPacket API Java基于UDP实现客户端-服务器代码实例 3.tcp流套接字编程 ServerSocket API Socket API TCP中的长短连接 Java基于TCP客户端-服务器代码实例 网络编程 1.socket套接字 S…

正则表达式基本语法(快速认知)

正则表达式:一种用于匹配字符串的模式。它可以用于搜索、替换、验证字符串等多种操作。 基本语法: 字符类: [abc]: 匹配 a、b 或 c。[a-z]: 匹配小写字母。[A-Z]: 匹配大写字母。[0-9]: 匹配数字母 比如我们的电话号码是11个数字组成, 则可以表示为: String tel"[0-9][0…

uniapp 引入了uview-ui后,打包错误,主包过大解决方案

原因:由于使用uniapp来设计小程序,使用uview的组件库,导致了主包过大,无法打包 前提条件:已经完成了分包,如果还没有分包的先分包,需要上传代码时用到 1. 通常情况,大多数都是通过点…

构建中小企业设备管理平台:Spring Boot应用

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

ReactOS系统中平衡二叉树按从左到右的顺序找到下一个结点

ReactOS系统中平衡二叉树按从左到右的顺序找到下一个结点MmIterateNextNode()按从左到右的顺序找到下一个结点 文章目录 ReactOS系统中平衡二叉树按从左到右的顺序找到下一个结点MmIterateNextNode()按从左到右的顺序找到下一个结点MmIterateNextNode() MmIterateNextNode() /*…

深入剖析 C 与 C++ 动态内存管理之术

亲爱的读者朋友们😃,此文开启知识盛宴与思想碰撞🎉。 快来参与讨论💬,点赞👍、收藏⭐、分享🥰,共创活力社区。 🔥🔥🔥【C】进阶:类相关…

Python实现基于WebSocket的stomp协议调试助手工具

stomp协议很简单,但是搜遍网络竟没找到一款合适的客户端工具。大多数提供的都是客户端库的使用。可能是太简单了吧!可是即便这样,假如有一可视化的工具,将方便的对stomp协议进行抓包调试。网上类似MQTT的客户端工具有很多&#xf…

linux shell 脚本语言教程(超详细!)

Shell 编程详细指南 什么是 Shell? Shell 是用户与操作系统内核之间的接口,允许用户通过命令行输入来控制操作系统。它充当命令解释器,读取用户输入的命令并执行相应的操作。Shell 提供了强大的脚本编程能力,可以自动化许多任务…

【javax maven项目缺少_Maven的依赖管理 引入依赖】

javax maven项目缺少_Maven的依赖管理 引入依赖 Maven的依赖管理 - 引入依赖依赖管理(引入依赖)导入依赖 https://blog.csdn.net/weixin_28932089/article/details/112381468 Maven的依赖管理 - 引入依赖 依赖管理(引入依赖) 能够掌握依赖引入的配置方式 导入依赖 导入依赖练…

银行客户贷款行为数据挖掘与分析

#1024程序员节 | 征文# 在新时代下,消费者的需求结构、内容与方式发生巨大改变,企业要想获取更多竞争优势,需要借助大数据技术持续创新。本文分析了传统商业银行面临的挑战,并基于knn、逻辑回归、人工神经网络三种算法&#xff0…

重构案例:将纯HTML/JS项目迁移到Webpack

我们已经了解了许多关于 Webpack 的知识,但要完全熟练掌握它并非易事。一个很好的学习方法是通过实际项目练习。当我们对 Webpack 的配置有了足够的理解后,就可以尝试重构一些项目。本次我选择了一个纯HTML/JS的PC项目进行重构,项目位于 GitH…

[旧日谈]高清画面撕裂问题考

背景 无边框透明背景透明的窗口,在随着缩放比例非整数倍数放大时的画面发生了露底、撕裂问题。 当我们在使用Qt开发的时候,遇到了一个结构性问题。因为我们的软件是自己做的,所以要自己定义标题栏,所以我们设置了软件为FrameLess…

mono源码交叉编译 linux arm arm64全过程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…

mysql——事务详解

一、事务定义 事务:事务是一个最小的不可在分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务是一个最小的工作单元)事务保证多条sql语句要么同时执行成功,要么同时执行失败一个完整的业务需要批量的DML…

移除Microsoft Edge浏览器“由你的组织管理“提示的方法

背景: 点击Microsoft Edge浏览器右上角的按钮有时候会出现提示“由你的组织管理”。但实际上自己的电脑并没有被公司或其他企业管理。 解决方案: 提示:修改注册表如果操作不当会影响电脑,请提前备份注册表!&#xff…

Java 开发——(上篇)从零开始搭建后端基础项目 Spring Boot 3 + MybatisPlus

一、概述 记录时间 [2024-10-23] 本文是一个基于 Spring Boot 3 MybatisPlus 的项目实战开发,主要涵盖以下几个方面: 从零开始的项目创建IDEA 中开发环境的热部署Maven、Swagger3、MybatisPlus 等的配置路由映射知识静态资源访问文件上传功能实现拦截器…

Qt之QCamera的简单使用

文章目录 一、相机操作相关示例1.摄像头操作内容使用示例2.摄像头信息展示使用示例3.摄像头设置切换、预览操作示例 二、相机使用个人操作理解1.相机类支持信息获取2.相机类曝光、焦点、图像处理控制信息获取3.快速启动相机设置(各个设备处于理想状态) 三…