什么是redis发布订阅模式,并用java代码实现小demo

news/2024/3/29 14:31:13/文章来源:https://blog.csdn.net/qq_30503389/article/details/130345687

Redis中的发布订阅模式是一种消息传递模式,其中订阅者通过订阅特定的频道(channel)来接收发布者发送的消息。发布者将消息发送到指定的频道,所有订阅该频道的订阅者都会收到相同的消息。 发布订阅模式主要应用于实时数据处理、消息推送、日志处理等场景,其中需要实时将数据传递给多个客户端,且客户端不需要响应发布者的请求。

Redis中的发布订阅模式一种多路复用技术,用于处理异步事件和订阅者/发布者模式。它允许多个客户端同时订阅同一个频道,并在该频道上获取相关的事件通知。这种模式在以下场景中特别有用:

  1. 处理长轮询(polling)场景:Redis通过发布订阅模式,实现了长轮询场景下的高效性能。当一个客户端订阅了一个频道后,它可以在该频道上设置一个过期时间,在该时间内不需要再轮询数据,而是等待事件发布。这样,当频道有事件发生时,Redis会立即得到通知,从而实现高效的数据获取。

  2. 实现分布式系统中的订阅者/发布者模式:在分布式系统中,多个客户端可能需要同时订阅同一个频道,以便在该频道上获取相关的事件通知。通过发布订阅模式,Redis可以轻松地实现这种模式,保证每个客户端都能够获取到最新的事件通知。

为了模拟发布订阅模式,可以使用Redis的命令模式来实现。以下是一个示例命令:

  1. 启动Redis服务,并启动两个客户端(分别代表发布者和订阅者)。

  2. 在发布者客户端中使用PUBLISH命令向指定频道发布消息。例如,向频道“news”发布一条消息:

PUBLISH news "Hello, World!"

3.在订阅者客户端中使用SUBSCRIBE命令订阅指定频道。例如,订阅频道“news”:

SUBSCRIBE news

此时,发布者客户端发布的消息会被订阅者客户端接收到并打印出来。

使用java代码实现一下Redis中的发布订阅模式

import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPubSub;
public class RedisPubSubExample {public static void main(String[] args) {// 创建Jedis对象Jedis jedis = new Jedis("localhost", 6379);// 创建订阅者JedisPubSub subscriber = new JedisPubSub() {@Overridepublic void onMessage(String channel, String message) {// 处理订阅到的消息System.out.println("Received message: " + message + " from channel: " + channel);}};// 订阅频道jedis.subscribe(subscriber, "news");// 在另一个线程中发布消息new Thread(() -> {try {Thread.sleep(1000);jedis.publish("news", "Hello, World!");} catch (InterruptedException e) {e.printStackTrace();}}).start();// 等待接收消息try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}// 取消订阅subscriber.unsubscribe();// 关闭Jedis连接jedis.close();}
}

在上述示例中,创建了一个Jedis对象,用于连接Redis服务。然后,创建了一个订阅者对象,并通过Jedis的subscribe()方法订阅了名为“news”的频道。在另一个线程中,使用Jedis的publish()方法向“news”频道发布了一条消息。当订阅者接收到消息后,会通过onMessage()方法进行处理。最后,通过unsubscribe()方法取消订阅,并关闭Jedis连接。

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

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

相关文章

自然语言处理基本任务综述

文章目录 1.多语言分词2.词性标注3.命名实体识别4.中心词提取5.依存句法分析6.文本纠错7.文本摘要8.文本相似度9.情感分析10.文本分类11.词向量 1.多语言分词 ​ 在自然语言处理中,分词(Tokenization)是指将自然语言文本中的连续字符序列划分…

VRP开源的算例资源

VRP开源的算例资源 开源的算例资源 开源的MIP算例网址 1. MISOCP网址 Benchmark instances:多种问题的算例数据 TSP算例网址 VRP标杆算例网址 1. Networking and Emerging Optimization发布的VRP算例 2. PRP算例 3. 一个学者的主页上的算例 4. Chair in L…

MySQL-----复合查询

文章目录 前言一、基本查询回顾二、 多表查询解决多表查询的思路 三、自连接四、子查询1. 单行子查询2. 多行子查询3. 多列子查询4. 在from子句中使用子查询5. 合并查询5.1 union5.2 unoin all 总结 前言 前面的学习中,对于mysql表的查询都是对一张表进行查询,在实际开发中这远…

医药之家:19家医药企业获机构调研,8家公司接待超100家

据医药之家了解,4月17日至21日,两市约113家公司接受了机构调研,其中有19家为医药生物公司。从这19家医药生物公司的调研榜单来看,8家公司近5日接待机构家数超100家,分别是长春高新、国际医学、美好医疗、迪瑞医疗、祥生…

【中标通知】塔望咨询中标新疆农发集团 品牌规划建设项目

【新疆农发集团供应链有限公司-品牌建设项目】于2022年5月正式启动。 本次项目2022年4月6日招标结果正式公示。【塔望咨询】凭借3W消费战略方法体系和专注食品行业丰富的品牌项目经验,中标新疆农发集团供应链有限公司兵团红品牌规划建设项目。 中标结果公告 新疆农…

天梯赛 L3-025 那就别担心了

原题链接: PTA | 程序设计类实验辅助教学平台 题目描述: 下图转自“英式没品笑话百科”的新浪微博 —— 所以无论有没有遇到难题,其实都不用担心。 博主将这种逻辑推演称为“逻辑自洽”,即从某个命题出发的所有推理路径都会将结…

用java 实现二叉树创建

二叉树是数据结构中的一个重要的概念,二叉树的概念最早由 Linus Torvalds在1958年提出。他给出了一个树形数据结构,可以用来存储二叉树。每个节点的左子树和右子树都是空,中间层是子树。在一个给定的空间中,每一个节点都有两个左右…

相机雷达联合标定cam_lidar_calibration

文章目录 运行环境:1.1 ROS环境配置1)工作空间创建和编译2)官方数据集测试环境 2.1 在线标定1)数据类型2)标定板制作3)配置文件4)开始标定5)完整实现步骤 3.1 python版本选择3.2 rvi…

4年的测试工程师,你遇到过自身瓶颈期吗?又是怎样度过的?

从毕业到现在已经快4年啦,一直软件测试行业混迹。我不是牛人,但是自我感觉还算是个合格的测试工程师,有必要写下自己将近4年来的经历,给自我以提示,给刚入行的朋友提供点参考。 貌似这一点适应的行业最广,…

Java——二叉搜索树的后序遍历序列

题目链接 牛客在线oj题——二叉搜索树的后序遍历序列 题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回 true ,否则返回 false 。假设输入的数组的任意两个数字都互不相同。 数据范围: 节点数量 0≤n≤1000 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来,随着高校规模的逐步扩大,学生对高校自习室座位的需求也在不断增加。然而,一些高校仍然采用人工管理学院自习室座位,这大大降低了管理效率。显然,开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

Junit 5 如何使用 Guice DI

Guice 是一个依赖注入的小清新工具。 相比 Spring 的依赖管理来说,这个工具更加小巧,我们可以在测试中直接使用。 Junit 5 在 Junit 中使用就没有那么方便了,因为 Junit 没有 Guice 的注解。 你需要手动写一个类,在这个类中&a…

ABeam Insight | 智能制造系列(6):虚拟/增强现实(VR/AR)×智能制造

虚拟现实(VR)和增强现实(AR)的概念早在20世纪60年代就被提出,但由于当时的技术水平无法满足相关应用的需求,这些概念并没有引起广泛关注。直到近年来随着计算机技术的飞速发展,虚拟现实和增强现…

nodejs+vue 文旅旅游公司智能管理OA系统

通过本次设计,让我学到了更多的知识,而且在设计中会有一些问题出现,最后通过查阅资料和在老师和同学的帮助下完成了系统的设计和开发,使得这次系统的开发非常的有意义。同时通过这次系统的设计也让我明白了自己在哪方面有不足&…

【PWN刷题__ret2text】[CISCN 2019华北]PWN1

ret2text~ 前言 依旧是简单的ret2text 一、checksec查看 No canary found 没有开启栈溢出保护 二、IDA反汇编 双击进入func() 发现后门函数system("cat/flag");根据语义,函数提供了修改v1,判断v2是否等于11.28125,如…

项目沟通管理5大技巧 第4个很重要

1、充分使用twitter管理沟通模型 项目沟通会议可以充分使用witter的管理沟通模型,提高会议沟通效率。使用此模型,主要是有三步: 第一步:倾听,项目经理需要保持中立的立场,不先表态,让团队成员畅…

SAP ABAP 使用SICF发布HTTP API接口

一、SE24创建类:Z_HCX_HTTP 1、创建类: 2、切换到接口(interface)页签,输入IF_HTTP_EXTENSION ,回车。切换到方法(method)页签,双击IF_HTTP_EXTENSION~HANDLE_REQUEST进…

STM32 产生随机数方式

STM32 产生随机数方式 C语言的stdlib.h库里的srand(unsigned seed)和rand(void)函数,可以配合产生伪随机数。其中srand(seed)产生算法种子,再由rand()通过算法产生随机数,产生的随机数在宏定义RAND_MAX范围内。如果seed不变,则产…

URL 转为QR code(二维码)

推荐一个良心的网站,能够免费地将url、text编码为二维码,而且还能设计logo、颜色等。 https://www.the-qrcode-generator.com/ 如下图: 可以自己定义logo、颜色: 还能查看扫描历史等统计信息: 上述所有功能都是免…

【虚拟仿真】Unity3D打包WEBGL后播放视频(VideoPlayer组件)

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 本篇文章实现Unity3D打包WEBGL后播放视频,如下图所…