【Redis】Redis 发布订阅通信模式 ( 发布订阅模式 | 订阅频道 | 发布消息 | 接收消息 )

news2024/9/22 21:26:03

文章目录

  • 一、发布订阅模式
  • 二、订阅频道
  • 三、发布消息
  • 四、接收消息





一、发布订阅模式



Redis 中 存在一种 发布订阅 消息通信模式 :

  • 消息发布者 : 负责发送消息 , 订阅者需要订阅该发布者频道 ;
  • 消息订阅者 : 负责接收消息 ;

订阅者 先 订阅 发布者频道 , 当 发布者 发布消息时 , 订阅者 会接收到该信息 ;


在 Redis 中 , 发布者 是 消息频道 , 订阅者 是 Redis 客户端 ;

  • 一个 Redis 客户端可以 订阅多个 消息频道 ;
  • 一个 消息频道 可以 被多个 Redis 客户端 订阅 ;

当 消息频道 发送消息后 , 订阅该频道的 客户端 , 就会收到该频道发送的消息 ;





二、订阅频道



订阅频道 : 在一个命令行中 , 执行

subscribe channel1

命令 , 可以 订阅 名称为 channel1 的 消息频道 ;


上述命令执行后 , 在命令行中会 阻塞等待 channel1 的消息到来 ;


代码示例 :

127.0.0.1:6379> subscribe channel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1

在这里插入图片描述





三、发布消息



重新打开一个 CMD 命令行工具 , 执行

publish channel1 hello

命令 , 向 channel1 通道中 , 发送 hello 消息 ;


代码示例 :

127.0.0.1:6379> publish channel1 hello
(integer) 1
127.0.0.1:6379>

在这里插入图片描述





四、接收消息



命令行 1 中 , 执行 subscribe channel1 命令 , 订阅了 channel1 频道 ;

命令行 2 中 , 执行 publish channel1 hello 命令 , 向 channel1 频道发送了 hello 消息 ;

然后在 命令行 1 中 , 接收到了 hello 消息 ;


代码示例 :

127.0.0.1:6379> subscribe channel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1
1) "message"
2) "channel1"
3) "hello"

在这里插入图片描述

接收的消息内容是 :

1) "message"
2) "channel1"
3) "hello"

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

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

相关文章

SpringBoot+ActiveMQ-发布订阅模式(生产端)

SpringBootActiveMQ-发布订阅模式(生产端)Topic 主题* 消息消费者(订阅方式)消费该消息* 消费生产者将发布到topic中,同时有多个消息消费者(订阅)消费该消息* 这种方式和点对点方式不同&#xf…

NETCore下CI/CD之自动化测试 (详解篇)

NETCore下CI/CD之自动化测试 (详解篇) 目录:导读 前言 安装JDK 安装 Tomcat 首先,我们需要指定 Tomcat.PID 进程文件,进入 /usr/local/tomcat/bin,编辑文件 增加 tomcat 账户并赋予权限 防止Jeknins…

JSP脚本指令及标记学习笔记

好久没更新文章了&#xff0c;上次更新的文章还是一个学习笔记。本篇博文介绍的是JSP基本概念 1.JSP开发方法 一个jsp网页只需要加上<%%>就行了。 2.JSP运行机制 3.JSP脚本元素 3.1 JSP脚本代码 <% 脚本代码 %>实例 <% SimpleDateFormat df new SimpleDa…

MathType公式编辑器过期(禁止联网)的解决方案

MathType公式编辑器过期&#xff08;禁止联网&#xff09;的解决方案 Mathtype公式编辑器无法使用解决方案 MathType联网后显示证书失效&#xff0c;需要重新认证或者购买。或者是MathType成了精简版&#xff0c;只剩两行了。 1. 打开控制面板 方法1 首先大家在电脑中打开W…

解析从Linux零拷贝深入了解Linux-I/O(下)

接上文解析从Linux零拷贝深入了解Linux-I/O&#xff08;上&#xff09; 大文件传输场景 零拷贝还是最优选吗 在大文件传输的场景下&#xff0c;零拷贝技术并不是最优选择&#xff1b;因为在零拷贝的任何一种实现中&#xff0c;都会有「DMA 将数据从磁盘拷贝到内核缓存区——P…

加油站会员管理小程序实战开发教程11

我们已经用了10篇的篇幅讲解了首页的功能,首页主要是用来展示信息的。那么接下来就要进入我们的功能页面了,会员管理一个比较重要的功能是充值的功能。 要想实现充值功能,首先需要办一张会员卡,那什么时候办理会员卡呢?需要先注册成为会员,然后进行开卡的动作。这里要注…

c/c++开发,无可避免的模板编程实践(篇五)

一、关联容器简述 容器containers是用来管理某对象数据的集合&#xff0c;每种容器都有其优缺点&#xff0c;为了应对不同应用需求&#xff0c;标准库准备了不同的容器类型&#xff0c;容器可以是数组、链表或者是每个元素有一个特别的键值&#xff08;KEY&#xff09;组织起来…

gocd部署应用

产品需要在多个环境部署测试&#xff0c;为了提高部署测试效率&#xff0c;故计划使用CD工具&#xff0c;jenkins确实足够强大&#xff0c;但是使用部署功能是需要安装插件的&#xff0c;再说自己本身只用部署功能&#xff0c;故决定找一个小巧的CD工具&#xff0c;经过一番查找…

CUDA线程块的分配

为了确保能够真正地了解线程块的分配&#xff0c;接下来我们写一个简短的内核程序来输出线程块、线程、线程束和线程全局标号到屏幕上。现在&#xff0c;除非你使用的是 3.2 版本以上的 SDK否则内核中是不支持 printf的。因此&#xff0c;我们可以将数据传送回 CPU 端然后输出到…

微内核和零拷贝

文章目录1.操作系统的特性并发共享虚拟异步2. 微内核(1) 支撑功能中断管理时钟管理原语操作(2)资源管理功能进程管理存储器管理设备管理3.零拷贝什么是零拷贝传统拷贝方式零拷贝方式GatherCopy零拷贝mmap零拷贝1.操作系统的特性 并发 并发&#xff1a;在宏观上&#xff0c;多个…

TryHackMe-Wreath [网络杀伤链](windows网络)渗透测试

Wreath 复习了几天&#xff0c;把自己写的辣鸡wp都看了看&#xff0c;ad也复了复&#xff0c;顺便还将之前一些不懂和遗漏的一些问题都解决了&#xff0c;所谓温故而知新 在继续红队路径之前&#xff0c;先来玩一玩期待已久的Wreath 了解如何通过破坏面向公众的 Web 计算机并…

分布式缓存的问题

1,Redis缓存穿透问题 Redis缓存穿透问题是指查询一个一定不存在的数据&#xff0c;由于这样的数据缓存一定不命中&#xff0c;所以这样的请求一定会打到数据库上。但是由于数据库里面也没有这样数据&#xff0c;且也没有将这样的null值缓存到数据库&#xff0c;从而造成这样的…

软件设计(十三)-原码、反码、补码、移码

软件设计&#xff08;十二&#xff09;数据结构(下)https://blog.csdn.net/ke1ying/article/details/129035300 下面把一个数转成二进制表达形式 原码&#xff1a; 数值1 &#xff1a; 0000 0001 数值-1 &#xff1a; 1000 0001 1 (- 1) &#xff1a; 1000 0010 这是8个…

【安卓逆向】APK修改与反编译回编译

【安卓逆向】反编译修改APK回编译使用工具流程步骤Apktool相关安装与使用常用命令备查APK签名命令备查实战练习反编译查看修改的地方使用Apktool反编译得到产物文件夹并进行修改回编APK实用场景在日常开发我们可能需要替换某些资源或者修改某些代码&#xff0c;但是我们没有源码…

Java基础语法练习题

2023.2.18刷题1、java的4类流程控制语句解析&#xff1a;java的4类流程控制语句循环语句&#xff1a;while&#xff0c;for&#xff0c;do while选择语句&#xff08;分支语句&#xff09;&#xff1a;if,switch跳转语句&#xff1a;break,continue,break,label异常处理语句&am…

Markdown及其语法详细介绍(全面)

文章目录一、基本语法1.标题2.段落和换行3.强调4.列表5.链接6.图片7.引用8.代码9.分割线10表格二、扩展语法1.标题锚点标题 {#anchor}2.脚注3.自动链接4.任务列表5.删除线6.表情符号7.数学公式三、Markdown 应用1.文档编辑2.博客写作3.代码笔记四、常见的工具和平台支持 Markdo…

加油站会员管理小程序实战开发教程12

我们上一篇介绍了会员数据源的开发,本节我们介绍一下会员注册功能。 首先呢梳理一下会员注册的业务逻辑,如果用户是首次登录,那他肯定还没有给我们的小程序提交任何的信息。那么我们就在我的页面给他显示一个注册的按钮,如果他已经注册过了,那么就正常显示会员的信息,他…

spring cloud 集成 seata 分布式事务

spring cloud 集成 seata 分布式事务 基于 seata-server 1.6.x 序言 下载 seata-server 准备一个数据库 seata 专门为 seata-server 做存储&#xff0c;如, 可以指定 branch_tabledistributed_lockglobal_tablelock_table 准备一个业务库&#xff0c;比如存放定单&#xff…

【学习笔记2.19】动态规划、MySQL、Linux、Redis(框架)

动态规划 343整数拆分 class Solution {public int integerBreak(int n) {int dp [] new int [n 1];//dp[i]:正整数i拆分后的最大乘积dp[2] 1;for(int i 2;i < n ;i ){for(int j 1;j < i;j ){dp[i] Math.max(dp[i],Math.max(j * (i - j),j * dp[i - j]));} …

Ubuntu安装opencv库3.4.10,并在cmake工程中引入opencv库

Windows下安装不同&#xff0c;Ubuntu安装OpenCV库时&#xff0c;需要事先安装依赖&#xff0c;而且不同OpenCV库所需的依赖可能会有所不同&#xff0c;下面的依赖亲测 3.4.10 和 4.5.5版本的有效&#xff0c;但是4.6以上版本安装可能会报错。 参考链接&#xff1a;https://bl…