当前位置: 首页 > article >正文

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

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() {
            @Override
            public 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.kler.cn/a/15556.html

相关文章:

  • Redis 5 种基本数据类型详解
  • React中组件通信的几种方式
  • 时间序列分析——移动平均法、指数平滑法、逐步回归法、趋势外推法等(基于Python实现)
  • 高光谱深度学习调研
  • vue+svg圆形进度条组件
  • 【动手学电机驱动】 STM32-FOC(7)MCSDK Pilot 上位机控制与调试
  • 我们要被淘汰了?从科技变革看"ChatGPT"与"无代码开发"
  • 【数据库数据恢复】ORACLE常见数据灾难的数据恢复可能性分析
  • 【学习笔记】CF607E Cross Sum
  • 前端开发技术——对象
  • apple pencil有买的必要吗?便宜的平替电容笔推荐
  • [学习笔记] [机器学习] 3. KNN( K-近邻算法)及练习案例
  • Springboot +Flowable,详细解释啥叫流程实例(二)
  • 跌倒检测和识别3:Android实现跌倒检测(含源码,可实时跌倒检测)
  • QFIELD-GIS工具版如何编辑数据
  • 入职华为外包一个月后,我离职向“北上广深”流浪了...
  • Ubuntu22.04部署Pytorch2.0深度学习环境
  • SQL性能调优简介
  • EPIT定时器实验(一)
  • 区块链学习一(FISCO BCOS部署控制台部署第一个HelloWorld)
  • 射频电路设计常见问题以及经验总结
  • 【MATLAB图像处理实用案例详解(12)】——利用BP神经网络实现图像压缩
  • redis 过期消息订阅实现(java实现)
  • Java数组的学习(基础)
  • [ 云原生 | Docker ] 构建高可用性的 SQL Server:Docker 容器下的主从同步实现指南
  • 带你看懂 Vue Hook和React Hook