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的发布和订阅相关推荐

  1. 面试被问到Redis实现发布与订阅,手摸手教

    简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...

  2. Redis实现发布与订阅(转)

    简介 Redis发布与发布功能(Pub/Sub)是基于事件座位基本的通信机制,是目前应用比较普遍的通信模型,它的目的主要是解除消息的发布者与订阅者之间的耦合关系. Redis作为消息发布和订阅之间的服 ...

  3. Redis 学习笔记-NoSQL数据库 常用五大数据类型 Redis配置文件介绍 Redis的发布和订阅 Redis_事务_锁机制_秒杀 Redis应用问题解决 分布式锁

    1.NoSQL数据库 1.1 NoSQL数据库概述 NoSQL(NosQL = Not Only sQL ),意即"不仅仅是sQL",泛指非关系型的数据库.NoSQL不依赖业务逻辑 ...

  4. redis的发布和订阅功能

    原理 redis的发布和订阅是个比较高深的概念,我一开始接触的时候感觉很茫然,但是后面用了下发现还是简单的.看来还是多需要自己尝试. 其实和消息队列差不多的原理,就是一个发布的频道,所有订阅这个频道的 ...

  5. Redis——Redis 的发布和订阅

    Redis 的发布和订阅 文章目录 Redis 的发布和订阅 1.什么是发布和订阅 2.Redis 的发布和订阅 3.发布订阅命令行实现 1.什么是发布和订阅 Redis 发布订阅 (pub/sub) ...

  6. redis学习之redis的发布和订阅

    目录 什么是发布和订阅 Redis的发布和订阅 1.客户端可以订阅频道如下图 2.当给这个频道发布消息后,消息就会发送给订阅的客户端 发布订阅命令行实现 1.打开一个客户端订阅channel1 2.打 ...

  7. 【redis】发布与订阅

    发布与订阅 Redis的发布与订阅功能由PUBLISH.SUBSCRIBE.PSUBSCRIBE等命令组成.通过执行SUBSCRIBE命令,客户端可以订阅一个或多个频道,从而成为这些频道的订阅者(su ...

  8. Redis 的发布与订阅

    3.Redis 的发布与订阅 3.1.发布与订阅简述 Redis提供了基于"发布/订阅"模式的消息机制.此种模式下,消息发布者和订阅者不进行直接通信,发布者客户端向指定的频道(ch ...

  9. Redis 进阶 -- 发布与订阅

    文章目录 1. 发布与订阅 1.1 PUBLISH:向频道发送消息 1.2 SUBSCRIBE:订阅频道 1.2.1 接收频道消息 1.3 UNSUBSCRIBE:退订频道 1.4 PSUBSCRIB ...

最新文章

  1. 产品经理规划产品之需求梳理
  2. 【无私分享:ASP.NET CORE 项目实战】目录索引
  3. Android SettingProvider详解
  4. GNU C中的零长度数组
  5. 网络防火墙实战-基于pfsense(1)
  6. java web转码_web/java实现多种格式视频上传、转码、截图、播放、下载等功能附源码(详细)...
  7. svn 单独导出某一个目录文件
  8. visual studio 2013 触发挂起事件
  9. CommandName与CommandArgument
  10. HTML URL 编码参考手册:ASCII 编码参考手册
  11. mysql foxpro,如何使用MySql同步Visual Foxpro dbfs?
  12. 解压RAR时出现“不可预料的压缩文件末端”的解决方法
  13. “国六”新要求——基于OBD系统的量产车评估测试 (PVE)
  14. SCCM 2012 R2部署,先决条件(二)
  15. 重视六大职场面试礼仪
  16. SEO人员,该如何打造具有搜索属性的内容?
  17. 瞎弄电脑BIOS设置,再次开机进入BitLocker恢复,恰巧微软账户啥密钥ID都有,就是和自己这个密钥对不上,然后如何将自己密钥保存到微软账户
  18. java如何关闭gc,GC垃圾回收机制,
  19. 使用WGET参数介绍大全
  20. matlab最优方案,matlab中文【应对方案】

热门文章

  1. JavaScript中的图片处理与合成(四) 1
  2. SOC与MCU的区别是什么
  3. 禁止jenkins杀死衍生进程
  4. Matlab:叠加阶梯图和线图
  5. ftp服务器上查看文件大小,ftp服务器上查看文件大小
  6. python中数据分组计算_python3数据聚合与分组运算(二)
  7. js---宏观任务和微观任务
  8. JavaScript + DOM
  9. IDEA设置项目编码
  10. Hive学习笔记三之函数操作