广告
返回顶部
首页 > 资讯 > 后端开发 > JAVA >JAVA 实现 Redis 发布订阅
  • 321
分享到

JAVA 实现 Redis 发布订阅

redisjava缓存 2023-08-18 20:08:45 321人浏览 安东尼
摘要

Redis 发布订阅 发布订阅:消息发布者发布消息 和 消息订阅者接收消息,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会

Redis 发布订阅

发布订阅:消息发布者发布消息消息订阅者接收消息,两者之间通过某种媒介联系起来

例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会派送给我们

Redis 发布订阅(pub/sub)是一种 消息通信模式 :发送者(pub)发送消息,订阅者(sub)接收消息。

Redis 客户端可以订阅任意数量的频道。

订阅 / 发布消息图:

图中可以看出,所需:

  1. 消息发送者 、 2. 频道 、 3. 消息订阅者

发布订阅机制

  1. 当一个客户端通过 PUBLISH 命令向订阅者发布消息的时候,称这个客户端为发布者publisher
  2. 当一个客户端通过subscribe 或者 PSUBSCRIBE 接收消息时,称这个客户端为 订阅者 subscriber
  3. 为了解耦发布者和订阅者之间的关系,Redis 使用了频道channel(频道)作为两者之间的中介,发布者直接把消息发送给 channel,而 channel 负责把消息发送给订阅者,发布者和订阅者之间没有直接的联系,都不知道对方的存在

订阅者 1,2,3 订阅了频道 channel,当有消息发布给频道时,这个消息就会被发送到三个订阅者客户端

demo 实现

学习参考链接

引入依赖

<dependency>    <groupId>org.springframework.bootgroupId>    <artifactId>spring-boot-starter-data-redisartifactId>dependency>

添加配置文件

spring:  redis:    host: 127.0.0.1    database: 5    passWord:    port: 6379
  1. Listener模式

创建一个监听容器

@Configurationpublic class CatListenerConfig extends CachinGConfigurerSupport {        @Bean    RedisMessageListenerContainer container(RedisConnectionFactory factory){        RedisMessageListenerContainer container = new RedisMessageListenerContainer();        container.setConnectionFactory(factory);        //订阅一个通道 该处的通道名是发布消息时的名称       container.setConnectionFactory(connectionFactory);        //订阅了一个叫cat 的通道        container.addMessageListener(catAdapter, new PatternTopic("cat"));        container.addMessageListener(fishAdapter, new PatternTopic("fish"));        return container;    }    }
@Componentpublic class CatListener implements MessageListener {    @Override    public void onMessage(Message message, byte[] bytes) {        System.out.println("我是监听者,我监听到的消息是 " + message.toString());    }}
package com.maoxs.listener;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.connection.MessageListener;import org.springframework.data.redis.core.RedisTemplate;public class FishListener  implements MessageListener  {    @Autowired    RedisTemplate redisTemplate;    @Override    public void onMessage(Message message, byte[] bytes) {        System.out.println("我是Fish监听" + message.toString());    }}

测试类,测试发布监听

@RestControllerpublic class TestController {    @Resource    StringRedisTemplate stringRedisTemplate;    @PostMapping("/cat")    public void test2(){        stringRedisTemplate.convertAndSend("cat","测试:消息发布者发布消息");    }     @PostMapping("/fish")    public void fish(){        stringRedisTemplate.convertAndSend("fish","测试:消息发布者发布消息");    }}

测试结果

  1. Adapter模式

    1 配置

            @Bean    public RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,Map<String, MessageListenerAdapter> adapterMap) {        RedisMessageListenerContainer container = new RedisMessageListenerContainer();        container.setConnectionFactory(connectionFactory);        adapterMap.keySet().forEach(topic-> container.addMessageListener(adapterMap.get(topic),new PatternTopic(topic)));        return container;    }

    监听1

    package com.sst.loan.risk.listener;import com.sst.loan.risk.manager.RuleLoadManager;import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;import org.springframework.stereotype.Component;import javax.annotation.Resource;@Slf4j@Component("ruleRefreshAdapter")public class RuleRefreshAdapter  extends MessageListenerAdapter {      @Override    public void onMessage(Message message, byte[] bytes) {        log.info(">>>>>>> 消息适配器收到刷新规则的请求 <<<<<<<<<<<<<<");    }}

    监听2

    package com.sst.loan.risk.listener;import com.sst.loan.risk.manager.RuleLoadManager;import lombok.extern.slf4j.Slf4j;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.listener.adapter.MessageListenerAdapter;import org.springframework.stereotype.Component;import javax.annotation.Resource;@Slf4j@Component("ruleRefreshAdapter2")public class RuleRefreshAdapter2  extends MessageListenerAdapter {      @Override    public void onMessage(Message message, byte[] bytes) {        log.info(">>>>>>> 消息适配器收到刷新规则的请求 <<<<<<<<<<<<<<");            }}

    测试

        @Resource    private StringRedisTemplate stringRedisTemplate;        @GetMapping("refresh")    public Object refresh() {        stringRedisTemplate.convertAndSend("ruleRefreshAdapter","refresh");        return Result.success();    }                @GetMapping("refresh")    public Object refresh() {        stringRedisTemplate.convertAndSend("ruleRefreshAdapter2","refresh");        return Result.success();    }

来源地址:https://blog.csdn.net/caidingnu/article/details/131184710

--结束END--

本文标题: JAVA 实现 Redis 发布订阅

本文链接: https://www.lsjlt.com/news/374752.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JAVA 实现 Redis 发布订阅
    Redis 发布订阅 发布订阅:消息发布者发布消息 和 消息订阅者接收消息,两者之间通过某种媒介联系起来 例如订杂志,当自己订阅了爱格杂志,每个月会发刊一本。到发布的时候派送员将杂志送到自己手上就能看到杂志内容。只有我们订阅了该杂志才会...
    99+
    2023-08-18
    redis java 缓存
  • redis的发布订阅
    简介 进程间的消息通信模式: 发送者(pub)发送消息,订阅者(sub)接收消息 示例,订阅多个 127.0.0.1:8686[1]> SUBSCRIBE c1 c2 c3 Reading messages... (press C...
    99+
    2020-06-08
    redis的发布订阅
  • Redis 发布订阅模型
    RedisServer包含两个重要的结构: 1. channels:实际上就是一个key-value的Map结构,key为订阅地频道,value为Client的List 2. patte...
    99+
    2022-10-18
  • Redis之发布与订阅
    订阅者可以通过subscribe和psubscribe命令向redis server订阅自己感兴趣的消息类型。redis将信息类型称为通道(channel)。当发布者通过publish命令向redis se...
    99+
    2022-10-18
  • redis发布订阅功能怎么实现
    redis发布订阅功能怎么实现?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Redis 发布订阅(pub/sub)是一种消息通信模式:发送...
    99+
    2022-10-18
  • Redis发布订阅实例分析
    这篇文章主要介绍了Redis发布订阅实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Redis发布订阅实例分析文章都会有所收获,下面我们一起来看看吧。Redis 发布订阅...
    99+
    2022-10-19
  • Spring boot+redis实现消息发布与订阅
    一.创建spring boot项目 org.springframework.boot spring-boot-starter-data-redis ...
    99+
    2017-09-29
    Spring boot+redis实现消息发布与订阅
  • 利用Redis实现分布式消息发布订阅
    利用Redis实现分布式消息发布订阅在分布式系统中,消息的发布和订阅是常用的通信模式。在这个模式下,消息发布者将消息发送给一个或多个主题,订阅者则订阅感兴趣的主题,并接收相应的消息。为了实现这个模式,我们可以借助Redis这个高性能的内存数...
    99+
    2023-11-07
    分布式 redis 消息订阅
  • Redis发布/订阅模式实例分析
    这篇文章主要讲解了“Redis发布/订阅模式实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Redis发布/订阅模式实例分析”吧!Redis发布/订阅应用发布订阅(pub/sub)是一...
    99+
    2023-06-27
  • Redis系列(八):发布与订阅
    Redis的发布与订阅,有点类似于消息队列,发送者往频道发送消息,频道的订阅者接收消息。 1. 发布与订阅示例 首先,在本机开启第1个Redis客户端,执行如下命令订阅blog.redis频道: SUBSCRIBE "blog.r...
    99+
    2015-06-07
    Redis系列(八):发布与订阅
  • redis怎么进行发布订阅
    redis进行发布订阅的方法:代码:public void publish(String topic ,String messge){Jedis jedis = null;if (StringUtils.isBlank(topic)){to...
    99+
    2022-10-25
  • Redis实现消息的发布订阅原理分析
    目录一、什么是发布和订阅二、Redis的发布和订阅三、redis 发布订阅常用命令四、命令实战1、基本使用2、订阅符合要求的频道3、查看活跃频道五、发布订阅原理1、订阅频道原理2、发布信息原理3、退订信息原理一、什么是发...
    99+
    2022-07-25
    Redis消息发布 Redis消息订阅
  • Redis发布订阅和实现.NET客户端详解
    前言 发布订阅在设计模式中也可以说是观察者模式,针对这个模式是处理对象间一对多的依赖关系的,当一个对象发生变化,其它依赖他的对象都要得到通知并更新。 然而它也有自己的缺点,就是当主题发生一系列的变化时,观察...
    99+
    2022-06-04
    详解 客户端 Redis
  • 怎么利用Jedis实现Redis的订阅与发布
    怎么利用Jedis实现Redis的订阅与发布?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。什么是Redis发布订阅Redis发布订阅是一种消息通信模式,发送者通...
    99+
    2023-05-31
    redis jedis
  • Redis | 第8章 发布订阅与事务《Redis设计与实现》
    目录前言《Redis常用命令及示例总结(API)》:https://www.cnblogs.com/dlhjw/p/15639773.html1. 发布订阅1.1 频道的订阅与退订1.2 模式的订阅与退订1.3 发送消息1.4 查看订阅消...
    99+
    2016-06-20
    Redis | 第8章 发布订阅与事务《Redis设计与实现》
  • 如何利用Redis实现分布式消息发布与订阅
    如何利用Redis实现分布式消息发布与订阅引言:在分布式系统中,消息发布与订阅是一种常见的通信模式,可以实现不同模块之间的解耦。Redis作为一种高性能的键值对存储系统,可以用来实现分布式消息发布与订阅功能。本文将介绍如何使用Redis来实...
    99+
    2023-11-07
    分布式 redis 消息发布
  • 如何利用Redis和C++实现发布-订阅功能
    如何利用Redis和C++实现发布-订阅功能,需要具体代码示例引言:Redis是一种开源的高性能键值存储系统,它支持多种数据结构,并提供了一系列的客户端库,适用于各种编程语言。Redis的发布-订阅功能是其最常用的功能之一,可以实现消息的发...
    99+
    2023-10-22
    C++ redis 发布订阅
  • redis实现队列的阻塞、延时、发布和订阅
    目录普通队列阻塞队列发布订阅模式延时队列和优先级队列应用场景Redis不仅可作为缓存服务器,还可以用作消息队列。它的列表类型天生支持用作消息队列。如下图所示: 由于Redis的列表...
    99+
    2022-11-13
  • redis发布订阅_动力节点Java学院整理
    其实在很多的MQ产品中都存在这样的一个模式,我们常听到的一个例子就是邮件订阅的场景,什么意思呢,也就是说100个人订阅了你的博客,如果博主发表了文章,那么100个人就会同时收到通知邮件,除了这个场景还能找到...
    99+
    2022-06-04
    节点 动力 学院
  • Python操作redis的订阅发布功能
    安装redis-serveryum -y install gcc gcc-c++    #安装编译工具cd /optwget -c http://download.redis.io/releases/redis-3.0.5.tar.gz  ...
    99+
    2023-01-31
    操作 功能 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作