Java实现Redis的发布和订阅
Redis上的操作:
打开两个窗口,打开redis客户端:
一个客户端:订阅(客户端订阅channel1频道):127.0.0.1:6379> subscribe channel1
另一个客户端:发布(客户端向channel1频道发送消息hello):127.0.0.1:6379> publish channel1 hello
Java代码实现
1: 先创建一个订阅消息处理类
/*** 订阅消息处理类** @version 1.0* @date 2022/05/26 15:51:11*/
public class Subscriber extends JedisPubSub {public Subscriber(){}//收到消息会调用@Overridepublic void onMessage(String channel, String message) {System.out.println("接收 redis 发布的消息, 频道为:" + channel + ", 消息内容是:" + message);}//订阅了频道会调用@Overridepublic void onSubscribe(String channel, int subscribedChannels) {System.out.println("订阅 redis 频道成功, 频道是:" + channel + ", 订阅频道数量是:" + subscribedChannels);}//取消订阅 会调用@Overridepublic void onUnsubscribe(String channel, int subscribedChannels) {System.out.println("取消订阅 redis 频道,频道:" + channel + ", 订阅频道:" + subscribedChannels);}
}
2: 创建消息的发布者
/*** 消息的发布者** @version 1.0* @date 2022/05/26 15:43:06*/
public class SmsPublisher extends Thread {private final JedisPool jedisPool;public SmsPublisher(JedisPool jedisPool) {this.jedisPool = jedisPool;}@Overridepublic void run() {BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));//连接池中取出一个连接Jedis jedis = jedisPool.getResource();while (true) {try {//向 xyzChannel 的频道上推送消息Long smsNumber = jedis.publish("xyzChannel", reader.readLine());System.out.println("消息的发布者:发布成功,当前向xyzChannel频道发送的消息数量为:" + smsNumber);} catch (IOException e) {e.printStackTrace();}}}}
3: 创建消息订阅者
/*** 消息订阅者** @version 1.0* @date 2022/05/26 15:49:47*/
public class SmsSubscriber extends Thread{private final JedisPool jedisPool;private final Subscriber subscriber = new Subscriber();//频道private final String channel = "xyzChannel";public SmsSubscriber(JedisPool jedisPool) {super("SmsSubscriber");this.jedisPool = jedisPool;}@Overridepublic void run() {System.out.println("订阅Redis频道,频道为:" + channel + ", 等待消息发送者发送消息(请在控制台输入消息内容)...");Jedis jedis = null;try {//取出一个连接jedis = jedisPool.getResource();//通过subscribe的api去订阅频道,入参是订阅者和频道名jedis.subscribe(subscriber, channel);} catch (Exception e) {System.out.println("消息订阅者订阅消息出现异常: " + e.getMessage());} finally {if (jedis != null) {jedis.close();}}}
}
4: Redis消息的发布和订阅测试类
/*** Redis消息的发布和订阅测试类** @version 1.0* @date 2022/05/26 16:01:56*/
public class SmsTest {public static void main(String[] args) {// 连接本地redis服务端JedisPool jedisPool = new JedisPool(new JedisPoolConfig(), "127.0.0.1", 6379);//消息的发布者SmsPublisher publisher = new SmsPublisher(jedisPool);publisher.start();//消息的订阅者SmsSubscriber subscriber = new SmsSubscriber(jedisPool);subscriber.start();}
}
运行结果
Java实现Redis的发布和订阅相关推荐
- 面试被问到Redis实现发布与订阅,手摸手教
简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...
- Redis实现发布与订阅(转)
简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...
- Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁
1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...
- redis的发布和订阅功能
原理 redis的发布和订阅是个比较高深的概念,我一开始接触的时候感觉很茫然,但是后面用了下发现还是简单的.看来还是多需要自己尝试. 其实和消息队列差不多的原理,就是一个发布的频道,所有订阅这个频道的 ...
- Redis——Redis 的发布和订阅
Redis 的发布和订阅 文章目录 Redis 的发布和订阅 1.什么是发布和订阅 2.Redis 的发布和订阅 3.发布订阅命令行实现 1.什么是发布和订阅 Redis 发布订阅 (pub/sub) ...
- redis学习之redis的发布和订阅
目录 什么是发布和订阅 Redis的发布和订阅 1.客户端可以订阅频道如下图 2.当给这个频道发布消息后,消息就会发送给订阅的客户端 发布订阅命令行实现 1.打开一个客户端订阅channel1 2.打 ...
- 【redis】发布与订阅
发布与订阅 Redis的发布与订阅功能由PUBLISH.SUBSCRIBE.PSUBSCRIBE等命令组成.通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(su ...
- Redis 的发布与订阅
3.Redis 的发布与订阅 3.1.发布与订阅简述 Redis提供了基于"发布/订阅"模式的消息机制.此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(ch ...
- Redis 进阶 -- 发布与订阅
文章目录 1. 发布与订阅 1.1 PUBLISH:向频道发送消息 1.2 SUBSCRIBE:订阅频道 1.2.1 接收频道消息 1.3 UNSUBSCRIBE:退订频道 1.4 PSUBSCRIB ...
最新文章
- 产品经理规划产品之需求梳理
- 【无私分享:ASP.NET CORE 项目实战】目录索引
- Android SettingProvider详解
- GNU C中的零长度数组
- 网络防火墙实战-基于pfsense(1)
- java web转码_web/java实现多种格式视频上传、转码、截图、播放、下载等功能附源码(详细)...
- svn 单独导出某一个目录文件
- visual studio 2013 触发挂起事件
- CommandName与CommandArgument
- HTML URL 编码参考手册:ASCII 编码参考手册
- mysql foxpro,如何使用MySql同步Visual Foxpro dbfs?
- 解压RAR时出现“不可预料的压缩文件末端”的解决方法
- “国六”新要求——基于OBD系统的量产车评估测试 (PVE)
- SCCM 2012 R2部署,先决条件(二)
- 重视六大职场面试礼仪
- SEO人员,该如何打造具有搜索属性的内容?
- 瞎弄电脑BIOS设置,再次开机进入BitLocker恢复,恰巧微软账户啥密钥ID都有,就是和自己这个密钥对不上,然后如何将自己密钥保存到微软账户
- java如何关闭gc,GC垃圾回收机制,
- 使用WGET参数介绍大全
- matlab最优方案,matlab中文【应对方案】