Redis 发布订阅 总结

news2024/10/28 13:01:44

前言


 相关系列

  • 《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.coloradmin.cn/o/2225440.html

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

相关文章

git的学习之远程进行操作

1.代码托管GitHub:充当中央服务器仓库的角色 2.git远程进行操作 3.配置本地服务器的公钥 4.推送 5.git远程操作 pull .gitignore 6.给命令配置别名 git config --global alias.st status 7.标签管理 git tag -a [name] -m "XXX" [commit_id] 操作标签…

ICMP Redirect Attack Lab

本实验的网络拓扑图如下所示: Task 1: Launching ICMP Redirect Attack 在Victim主机上查看路由表,结果如下: 2.在Victim上Ping 192.168.60.60.5,结果如下: 3.在Attkaker主机上创建redirect_attack.py文件, 内容如下: 4.接下来查看tracerou…

纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发

温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人! 前言 在软件开发中遇到使用流媒体音视频的行业比较多,如安防监控系统、无人机巡逻视频上云处理、直播平台、教育与企业培训…

C++红黑树插入操作的模拟实现

1.红黑树概念 1.1什么是红黑树 红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或 Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩…

Linux 重启命令全解析:深入理解与应用指南

Linux 重启命令全解析:深入理解与应用指南 在 Linux 系统中,掌握正确的重启命令是确保系统稳定运行和进行必要维护的关键技能。本文将深入解析 Linux 中常见的重启命令,包括功能、用法、适用场景及注意事项。 一、reboot 命令 功能简介 re…

Flutter图片控件(七)

1、加载图片 import package:flutter/material.dart;void main() {runApp(const MaterialApp(home: MyHomePage(),)); }class MyHomePage extends StatelessWidget {const MyHomePage({super.key});overrideWidget build(BuildContext context) {return Scaffold(appBar: AppB…

Python:背景知识及环境安装

一、计算机的基础概念 1.1 什么是计算机? 最早我们有计算器,但是他只能完成算数运算的功能 而计算机能完成的工作有: (1)算术运算 (2)逻辑判断 (3)数据存储 &#xff08…

k8s 二进制部署安装(一)

目录 环境准备 初始化操作系统 部署docker 引擎 部署 etcd 集群 准备签发证书环境 部署 Master01 服务器相关组件 apiserver scheduler controller-manager.sh admin etcd 存储了 Kubernetes 集群的所有配置数据和状态信息,包括资源对象、集群配置、元数据…

基于SSM+小程序的旅游社交登录管理系统(旅游4)

👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1、项目介绍 ​ 本旅游社交小程序功能有管理员和用户。管理员有个人中心,用户管理,每日签到管理,景点推荐管理,景点分类管理,防疫查询管理&a…

51单片机完全学习——DS18B20温度传感器

一、DS18B20数据手册解读 首先我们知道DS18B20使用的是单总线传输,默认情况下读出来的温度是12位的,我们这里只讨论外部电源供电这种情况。 有这张图片我们知道,12位温度的最小分辨率是10^-4次方,因此就是0.0625.我们只需要将最后…

论文阅读(二十三):Squeeze-and-Excitation Networks

文章目录 1.介绍2.原理3.代码4.SE模块的应用 论文:Squeeze-and-Excitation Networks   论文链接:Squeeze-and-Excitation Networks   代码链接:Github 1.介绍 卷积算子使网络能够在每一层的局部感受野中融合空间(spatial&…

内容安全与系统构建加速,助力解决生成式AI时代的双重挑战

内容安全与系统构建加速,助力解决生成式AI时代的双重挑战 0. 前言1. PRCV 20241.1 大会简介1.2 生成式 Al 时代的内容安全与系统构建加速 2. 生成式 AI2.1 生成模型2.2 生成模型与判别模型的区别2.3 生成模型的发展 3. GAI 内容安全3.1 GAI 时代内容安全挑战3.2 图像…

Linux 进程间通信_匿名管道

1.程间通信目的 : 数据传输:一个进程需要将它的数据发送给另一个进程 资源共享:多个进程之间共享同样的资源。 通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如…

Linux CentOS7下创建SFTP服务器

本文详细介绍了在Linux CentOS上部署安全文件传输协议(SFTP)服务器的全过程。SFTP基于SSH(安全壳层协议)提供文件传输服务,继承了SSH的安全特性,如数据加密、完整性验证和服务器认证等,确保数据…

信号与系统学习:周期信号的频谱

一、概念 1. 什么是频谱? 频谱描述了信号在不同频率上的能量分布对于一个周期信号,其频谱通常是离散的,由一系列离散的频率成分组成 2. 周期信号与傅里叶级数 周期信号可以用傅里叶级数展开,表示为无数个正弦和余弦&#xff0…

巡飞单机多旋翼无人机技术详解

巡飞单机多旋翼无人机技术是一种集成了多种先进技术的无人机系统,它具备自主飞行、长续航、高精度控制以及多任务负载能力等特点。以下是对巡飞单机多旋翼无人机技术的详细解析: 一、机架与结构设计 1.材料选择:为了确保无人机能够承载足够…

基于深度学习的图像修复系统设计与实现(PyQt5、CodeFormer ffhq-dataset数据集)

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

logback日志导入使用

1导入配置 <!-- 日志 &#xff0c; 会自动传递slf4j门面--> <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version> </dependency>2 引入配置 Logback要求…

Synergy遇见的问题

1.两台设备无法ping通 首先两个设备是在同一个局域网中&#xff0c;但任然是无法ping通 问题所在&#xff1a;防火墙进行了隔离&#xff1b; 解决方法&#xff1a; &#xff08;1&#xff09;关闭防火墙 没有用过&#xff0c;个人感觉不怎么安全就没有使用&#xff1b; &am…

react18中的受控与非受控组件及ref的使用

受控与非受控组件 受控组件,基于修改 state 的值,修改组件内部的状态&#xff0c;来实现页面的更新&#xff0c;推荐使用 非受控组件&#xff0c;基于 ref 获取 dom 的值&#xff0c;来实现页面的更新,不推荐使用,偶尔特殊的场景会使用 给需要获取的元素设置 ref“xxx”,后期基…