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. java 判断object类型_Java学习-方法与多态的学习心得
  2. Hinton 新作!越大的自监督模型,半监督学习需要的标签越少
  3. 学会使用Chromium中的LOG
  4. 前端学习(235):css HACK
  5. Spring注解 @Qualifier 说明、用法
  6. 直播的学习与使用-----采集
  7. 新农大计算机学院照片,【新生指南】小团带你逛校园(内附农大全景图~)
  8. html 折叠焦点图切换,jQuery层叠式图片切换焦点图插件
  9. SharedCache分析:服务端程序
  10. 联想a500手机驱动_一块砖也敢刷:联想手机A368T刷了三次才重新进入系统
  11. 想学一门技术,学java有前途吗?
  12. 2012-7-19可樂词汇积累#9316;
  13. Win10蓝牙开关不显示,任务栏不显示蓝牙图标解决方案
  14. 深圳医疗器械帮;一个军团的诞生
  15. 漏洞大爆光 QQ漏洞 飞秋漏洞 360浏览器劫持
  16. 哈希算法-SHA-256-过程详解
  17. Remove Double Negative(去除双重否定)
  18. 我天!中国科技原来有桎梏!道翰天琼认知智能机器人API平台接口为您揭秘。
  19. openwrt 恢 复 出厂设置
  20. 汇编语言中sbb是什么意思_汇编语言里 sub是 什么功能?

热门文章

  1. 【动手学深度学习PyTorch版】15 池化层
  2. OpenOCD安装与使用(JTAG调试)
  3. [附源码]JSP+ssm计算机毕业设计“好租”汽车出租系统5a9r1【源码、数据库、LW、部署】
  4. 2020西式面点师(高级)考试及西式面点师(高级)模拟考试题
  5. Android9.0从系统层面修改android_id
  6. “芝麻街”喜添新成员——Big bird
  7. 仙道录 第一卷 天道门 第三章 天道门
  8. 加密货币技术架构(二)——BNB
  9. 《巧克甜恋》官方中文版全解锁存档分享
  10. 送给那些优柔寡断和喜欢胡思乱想的朋友们