【赵强老师】Redis的消息发布与订阅[通俗易懂]

【赵强老师】Redis的消息发布与订阅[通俗易懂]Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型

【赵强老师】Redis的消息发布与订阅

【赵强老师】Redis的消息发布与订阅[通俗易懂]

Redis 作为一个publish/subscribe server,起到了消息路由的功能。订阅者可以通过subscribe和psubscribe命令向Redis server订阅自己感兴趣的消息类型,当发布者通过publish命令向Redis server发送特定类型的消息时。订阅该消息类型的全部client都会收到此消息。这里消息的传递是多对多的。一个client可以订阅多个channel,也可以向多个channel发送消息。

下图为大家展示了Redis消息机制的体系架构。

【赵强老师】Redis的消息发布与订阅[通俗易懂]

发布者和订阅者都是Redis客户端,Channel则为Redis服务器端,发布者将消息发送到某个的频道,订阅了这个频道的订阅者就能接收到这条消息。Redis的这种发布订阅机制与基于主题的发布订阅类似,Channel相当于主题。

下面列出来了Redis发布消息、订阅消息的相关命令。

publish:
发送消息:Redis采用PUBLISH命令发送消息,其返回值为接收到该消息的订阅者的数量。 

subscribe:
订阅某个频道:Redis采用SUBSCRIBE命令订阅某个频道,其返回值包括客户端订阅的频道,目前已订阅的频道数量,以及接收到的消息,其中subscribe表示已经成功订阅了某个频道。 

psubscribe:
模式匹配:模式匹配功能允许客户端订阅符合某个模式的频道,Redis采用PSUBSCRIBE订阅符合某个模式所有频道,用“”表示模式,“”可以被任意值代替。

代码100分

代码100分 

案例一:一个消息生产者,两个消息消费者

【赵强老师】Redis的消息发布与订阅[通俗易懂]

案例二:两个消息生产者,一个消息消费者

【赵强老师】Redis的消息发布与订阅[通俗易懂]

案例三:Redis消息机制的Java API

添加依赖:

<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.1.0</version>
</dependency> 

 

消息监听器类:

代码100分import redis.clients.jedis.JedisPubSub;
 
public class RedisMsgPubSubListener extends JedisPubSub {
    @Override
    public void unsubscribe() {
        super.unsubscribe();
    }
 
    @Override
    public void unsubscribe(String... channels) {
        super.unsubscribe(channels);
    }
 
    @Override
    public void subscribe(String... channels) {
        super.subscribe(channels);
    }
 
    @Override
    public void psubscribe(String... patterns) {
        super.psubscribe(patterns);
    }
 
    @Override
    public void punsubscribe() {
        super.punsubscribe();
    }
 
    @Override
    public void punsubscribe(String... patterns) {
        super.punsubscribe(patterns);
    }
 
    @Override
    public void onMessage(String channel, String message) {
        System.out.println("channel:" + channel + "receives message :" + message);
        this.unsubscribe();
    }
 
    @Override
    public void onPMessage(String pattern, String channel, String message) {
 
    }
 
    @Override
    public void onSubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been subscribed:" + subscribedChannels);
    }
 
    @Override
    public void onPUnsubscribe(String pattern, int subscribedChannels) {
 
    }
 
    @Override
    public void onPSubscribe(String pattern, int subscribedChannels) {
 
    }
 
    @Override
    public void onUnsubscribe(String channel, int subscribedChannels) {
        System.out.println("channel:" + channel + "is been unsubscribed:" + subscribedChannels);
    }
}

 

测试程序:

import redis.clients.jedis.Jedis;

public class TestMain {

   @Test
    public void testSubscribe() throws Exception{
        Jedis jedis = new Jedis("localhost");
        RedisMsgPubSubListener listener = new RedisMsgPubSubListener();
        jedis.subscribe(listener, "redisChatTest");
        //other code
    }

    @Test
    public void testPublish() throws Exception{
        Jedis jedis = new Jedis("localhost");
        jedis.publish("redisChatTest", "Hello World");
        Thread.sleep(5000);
        jedis.publish("redisChatTest", "Hello Redis");
    }
}

【赵强老师】Redis的消息发布与订阅[通俗易懂]

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8579.html

(0)
上一篇 2023-02-26
下一篇 2023-02-26

相关推荐

  • Python模块的使用

    Python模块的使用Python是一种高级编程语言,被广泛用于数据分析、机器学习、Web应用程序和系统管理等领域。Python库是一个重要的工具,它提供了许多函数和类库,可以大大提高我们的编程效率,比如可以避免重复劳动。这些库是Python模块的一部分,允许我们在我们的脚本或应用程序中使用。

    2024-05-09
    60
  • 安装wxPython的简单步骤

    安装wxPython的简单步骤wxPython是一种基于Python编程语言的图形用户界面(GUI)工具包。其目的是为Python开发者提供创建应用程序的GUI界面的便利性和功能性。wxPython库包含大量的控件,功能强大而灵活,可以帮助你快速开发GUI应用程序。

    2024-06-23
    48
  • Python解释器安装

    Python解释器安装 Python是一门高级的编程语言,因其具有简洁、易读、功能强大以及可用于多种编程领域的特性而备受青睐。在进行Python的开发过程中,我们需要先对其解释器进行安装与配置,才能在本地开发环境上进行Python的编写、运行、调试与测试等操作。本文将介绍Python解释器的安装流程,帮助你成功地安装Python解释器,并为后续的Python开发打下坚实的基础。

    2024-07-27
    29
  • 南宁哪里可以开印刷费发票-中国-新闻网「终于解决」

    南宁哪里可以开印刷费发票-中国-新闻网「终于解决」南宁哪里可以开印刷费发票【152 * 9б 28 * 21 б9】陈生,诚、信、合、作,保、真、售、后、保、障、长、期、有、效。adb的全称为Android Debug Bridge,是Androi…

    2023-02-01
    151
  • 将 Python 路径设置为中心

    将 Python 路径设置为中心a href=”https://beian.miit.gov.cn/”苏ICP备2023018380号-1/a Copyright www.python100.com .Some Rights Reserved.

    2024-05-12
    68
  • Python实现的索引查找功能

    Python实现的索引查找功能索引查找是一种快速查找数据的算法,它可以在大数据集合中快速地定位到目标数据的位置。索引是数据的引用,也可以看做是数据的指针。利用索引可以减少查找的时间复杂度,提高数据的检索效率。

    2023-12-07
    120
  • oracle sql developer下载_oracledeveloper安装教程

    oracle sql developer下载_oracledeveloper安装教程
    之前整理的是PostgreSQL9和PostGIS2的安装手册,最近在安装PostgreSQL13时发现由于版本过新,安装步骤略有不同,这里简单记录一下安装…

    2023-04-07
    152
  • Redis的噩梦:阻塞(JedisConnectionException、以及CPU饱和内存不足等)[通俗易懂]

    Redis的噩梦:阻塞(JedisConnectionException、以及CPU饱和内存不足等)[通俗易懂]Redis是典型的单线程架构,所有的读写操作都是在一条主线程中完成的。当Redis用于高并发场景时,这条线程就变成了它的生命线。如果出现阻塞,哪怕是很短时间,对于我们的应用来说都是噩梦。导致阻塞问题的

    2023-05-29
    141

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注