redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅

51de2759000afee755e2f674200ae042.png

欢迎关注赵强老师微信公众号:myitshare

Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。

下图为大家展示了Redis消息机制的体系架构。

e5cd4517996d09404ffc95cd3c32f0f6.png


发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

下面列出来了Redis发布消息、订阅消息的相关命令。

publish:
发送消息:Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。 subscribe:
订阅某个频道:Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。 psubscribe:
模式匹配:模式匹配功能允许客户端订阅符合某个模式的频道,Redis采用PSUBSCRIBE订阅符合某个模式所有频道,用“”表示模式,“”可以被任意值代替。

案例一:一个消息生产者,两个消息消费者

97f0202e813770e9e87fbf5a6a8accde.png

案例二:两个消息生产者,一个消息消费者

cc5b296961a627c9addcd8f03800af57.png

案例三:Redis消息机制的Java API

  • 添加依赖:
<dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.1.0</version>
</dependency> 
  • 消息监听器类
import redis.clients.jedis.JedisPubSub;public class RedisMsgPubSubListener extends JedisPubSub {@Overridepublic void unsubscribe() {super.unsubscribe();}@Overridepublic void unsubscribe(String... channels) {super.unsubscribe(channels);}@Overridepublic void subscribe(String... channels) {super.subscribe(channels);}@Overridepublic void psubscribe(String... patterns) {super.psubscribe(patterns);}@Overridepublic void punsubscribe() {super.punsubscribe();}@Overridepublic void punsubscribe(String... patterns) {super.punsubscribe(patterns);}@Overridepublic void onMessage(String channel, String message) {System.out.println("channel:" + channel + "receives message :" + message);this.unsubscribe();}@Overridepublic void onPMessage(String pattern, String channel, String message) {}@Overridepublic void onSubscribe(String channel, int subscribedChannels) {System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);}@Overridepublic void onPUnsubscribe(String pattern, int subscribedChannels) {}@Overridepublic void onPSubscribe(String pattern, int subscribedChannels) {}@Overridepublic void onUnsubscribe(String channel, int subscribedChannels) {System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);}
}

测试程序:

package demo.redis;import redis.clients.jedis.Jedis;public class TestMain {@Testpublic void testSubscribe() throws Exception{Jedis jedis = new Jedis("localhost");RedisMsgPubSubListener listener = new RedisMsgPubSubListener();jedis.subscribe(listener, "redisChatTest");//other code}@Testpublic void testPublish() throws Exception{Jedis jedis = new Jedis("localhost");jedis.publish("redisChatTest", "Hello World");Thread.sleep(5000);jedis.publish("redisChatTest", "Hello Redis");}
}

欢迎关注赵强老师微信公众号:myitshare

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

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

相关文章

上海大学计算机考研数一数二,2021年考研成绩出来了!上海大学数二人均135+,“神仙打架”现场...

原标题&#xff1a;2021年考研成绩出来了&#xff01;上海大学数二人均135&#xff0c;“神仙打架”现场文/跳跳妈妈谈教育2000年代初期&#xff0c;电视上流行这样一句话&#xff0c;“二十一世纪什么最珍贵&#xff1f;人才&#xff01;”时间如长河不断流逝&#xff0c;步入…

对称密钥加密算法 对称轮数_选择Java加密算法第2部分–单密钥对称加密

对称密钥加密算法 对称轮数抽象 这是涵盖Java加密算法的三部分博客系列的第2部分。 该系列涵盖如何实现以下功能&#xff1a; 使用SHA–512散列 AES–256 RSA–4096 这第二篇文章详细介绍了如何实现单密钥对称AES-256加密。 让我们开始吧。 免责声明 这篇文章仅供参考。 在…

Linux 命令之 unxz -- 解压缩文件

文章目录一、命令介绍二、命令示例&#xff08;一&#xff09;解压文件&#xff08;二&#xff09;将指定的压缩文件解压缩到指定的目录下&#xff0c;且可以重命名一、命令介绍 unxz 命令用于解压缩使用 xz 压缩的文件包&#xff0c;实际 unxz 相当于 xz -d 二、命令示例 &…

计算机配置界面在那,在哪里设置关机画面?设置为原来的经典界面?

电脑故障现象&#xff1a;我用的系统是winxp&#xff0c;关机出现的画面是那种下拉式菜单“注销、重启、关机、取消”&#xff0c;我想用的不是这种下拉式菜单&#xff0c;是并列图标那种&#xff0c;请问在哪里设置&#xff1f;(电脑入门到精通网 www.58116.cn)一般解决方法&a…

程序代码移植和烧录需要注意什么_购买建站模板需要注意什么问题

购买建站模板需要注意什么问题?现在市面上出现的建站工具质量参差不齐&#xff0c;但是如此多的建站模板&#xff0c;应该选择哪个呢&#xff1f;如此多的建站工具平台应该怎么样选择呢&#xff1f;这里我们来聊一聊。北京网站建设公司—东浩联创现在非常多站长都会购买一些定…

java字符串各个字符计数_没有科学计数法的Java十进制数的简单字符串表示形式...

java字符串各个字符计数Java中用于十进制数字的主要类型 /对象是float / Float &#xff0c; double / Double和BigDecimal 。 在每种情况下&#xff0c;其“默认”字符串表示形式都是“计算机科学计数法”。 这篇文章演示了一些简单的方法&#xff0c;可以在没有科学符号的情况…

python操纵excel的方法_python操作Excel的几种方式

Python对Excel的读写主要有xlrd、xlwt、xlutils、openpyxl、xlsxwriter几种。首先你的本地要有包文件&#xff0c;安装上面的包文件如下图1.xlrd主要是用来读取excel文件import xlrdworkbook xlrd.open_workbook(u有趣装逼每日数据及趋势.xls)sheet_names workbook.sheet_name…

计算机线性输入录音原理,耳机输出的模拟信号-怎样把声音通过线路录入电脑?比方说,收音机的耳机输出孔,接线(串 爱问知识人...

啊&#xff1f;有这样的东西吗&#xff1f;想把收音机里的声音录下来很简单。你在电脑上收听就可以了。这和软件无关。是因为硬件。买了转接头也是没用的。因为计算机声卡只能通过计算机来放音然后录制。其实你指的就是放音录制而不是通过其他线路来录制。这和外放的设备无关。…

Linux 如何查看命令所在位置/查看命令文件所在位置

文章目录whichtypewhereiswhich which 命令的作用是在环境变量 PATH 所指定的路径中&#xff0c;搜索某个系统命令的位置&#xff0c;并且返回第一个搜索结果。 查看命令详情&#xff0c;猛戳 《Linux 命令之 which – 查找并显示给定命令的绝对路径》 [roothtlwk0001host ~…

java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

java 方法 示例大家好&#xff0c;这是我在该博客上发表的有关Java 9功能的第一篇文章&#xff0c;今天您将了解我最喜欢的功能“收集的工厂方法” &#xff0c;它是JEP 269的一部分。JEP代表JDK增强建议。 如果您曾经在Groovy或Kotlin工作过&#xff0c;那么您就会知道使用集合…

python中的深拷贝_Python中的深拷贝和浅拷贝

前言&#xff1a;在认识深浅拷贝的时候&#xff0c;先了解python中的可变类型与不可变类型。 以及 python中的传参到底是传递值还是传递引用(内存地址)python中的可变数据类型主要有 :(列表,字典) 指的是在内存地址(id)不变的情况下&#xff0c;可变数据类型的‘值’是可以发生…

JDK 命令之 jar -- 压缩/解压缩工具

文章目录一、命令介绍二、命令格式三、常用选项四、命令示例&#xff08;一&#xff09;将指定目录打成 jar 包&#xff08;二&#xff09;将指定目录打成 jar 包&#xff0c;且不生成文件 META-INF/MANIFEST.MF&#xff08;三&#xff09;打包时指定文件 MANIFEST.MF&#xff…

高一计算机算法教案,高一信息技术第六章“第一节程序设计的基本方法”教案设计...

一、教学目标1&#xff0e;理解算法的概念&#xff1b;2&#xff0e;知道两种算法的描述方法—语言描述法和流程图的区别3&#xff0e;能初步利用算法解决简单的问题。4&#xff0e;培养学生的理论联系实际能力和动手操作能力。二、教学重难点1&#xff0e;重点&#xff1a;算法…

openshift安装_云幸福–如何在几分钟内安装新的OpenShift Container Platform 3.7

openshift安装此安装需要安装Red Hat Middleware产品流&#xff08;预配置的容器选项&#xff09;以及所有其他功能&#xff0c;例如源容器&#xff0c;映像容器和.Net Core容器。自OpenShift容器平台发布以来&#xff0c;我一直希望提供一个简单的方法。 &#xff0c;完全配置…

python 实现语音转文字_python3实现语音转文字(语音识别)和文字转语音(语音合成)...

话不多说&#xff0c;直接上代码运行截图1.语音合成------->执行&#xff1a;结果&#xff1a;输入要转换的内容&#xff0c;程序直接帮你把转换好的mp3文件输出(因为下一步–语音识别–需要.pcm格式的文件&#xff0c;程序自动执行格式转换&#xff0c;同时生成17k.pcm文件…

Linux 命令之 7z(7-zip) -- 压缩/解压文件

文章目录 一、命令介绍(一)主要特征1.使用 LZMA 算法2.支持多种格式(二)退出代码的含义(三)关于通配符(四)关于覆盖文件的提示回应二、命令格式三、常用子命令四、常用选项五、命令示例(一)测试压缩档案的完整性(二)将指定的压缩档解压到指定的目录下(三)列出指定…

简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

优秀程序员通过简单代码&#xff0c;窥探电脑编程中强大的数组操作功能。编程语言中&#xff0c;数组是一个非常重要的概念&#xff0c;也是一种很常用的类型。本文中通过javascript语言的代码实例&#xff0c;展现编程中数组的魅力。在javascript语言中&#xff0c;数组Array类…

java 示例_功能Java示例 第3部分–不要使用异常来控制流程

java 示例这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在前面的部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。…

Linux 命令之 gzip -- 压缩和解压文件

文章目录一、命令介绍二、常用选项三、命令示例&#xff08;一&#xff09;将指定目录下的每个文件压缩成 .gz 文件&#xff08;二&#xff09;解压指定目录下的每个压缩文件&#xff08;三&#xff09;显示指定目录下每个压缩文件的信息&#xff0c;并不解压&#xff08;四&am…

python读取tiff数据_opencv-python读取tiff影像,并展示

pencv-python可以读取各类图片&#xff0c;然后对图像进行处理&#xff0c;结合矩阵操作&#xff0c;可以非常方便的对图像进行各类操作&#xff0c;下面就展示一个简单的demo&#xff0c;用opencv-python读取图像并展示出来。Opencv的库安装可能比较麻烦一点。# 导入cv模块imp…