• Redis的发布和订阅


    Redis的发布和订阅

    Redis发布订阅(pub/sub)是一种消息通信模式,pub发布消息,sub接收消息。(pub/sub)是一种生产者消费者模式,是实现消息队列的一种方式

    redis的订阅和发布是解耦和多播的方式。且是一种消息队列的方式,可以实现系统解耦,削峰填谷,顶住流量洪峰。但redis的订阅和发布只是redis的一种尝试,redis的主要业务还是键值对的数据存储,缓存等,实际主流的消息队列有ActiveMQ,RabbitMQ等

    操作方式

    sub方要先订阅某个频道
    进入redis-cli之后,执行 subsribe channelName。其中channelName支持模式匹配即使用*能匹配多个频道

    然后发布方发布消息,接收方就能收到,执行: publish channelName content

    接收方:要现有接收方,发布方的消息才能被收到,且接收方会一直监听消息
    代码简单实现

    package com.swagger.ranger.redis.Pub_Sub;
    
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPubSub;
    
    /*******************************************************************************
     * @Copyright (C), 2018-2019,github:Swagger-Ranger 
     * @FileName: RedisSubcriber
     * @Author: liufei32@outlook.com
     * @Date: 2019/3/24 18:08
     * @Description: redis发布者
     * @Aha-eureka:  JedisPubSub是一个定义的抽象类,在这个类中定义publish/subscribe 回调方法,
     *               通过继承JedisPubSub类并重写回调方法,当publish/subscribe 事件发生时,我们可以自己定制处理逻辑
     *
     *               JedisPubSub的使用方法为:在一个Jedis的连接中调用其中的subscribe方法并传入JedisPubSub的子类,和频道名;
     *               就可以自动接收订阅消息
     *******************************************************************************/
    
    public class RedisSubcriber extends JedisPubSub {
    
        /**
         * onMessage是一个回调的自动方法,当有消息时会自动执行该方法
         * 重写本方法来实现自己的业务逻辑处理
         * @param channel
         * @param message
         */
        @Override
        public void onMessage( String channel, String message ) {
            System.out.println("channel[" + channel + "] published a message that is [" + message + "]");
        }
    
    
        public static void main( String[] args ) {
            Jedis jedis = new Jedis("120.27.227.49", 6379);
            RedisSubcriber redisSubcriber = new RedisSubcriber();
            jedis.subscribe(redisSubcriber, "channel1");
        }
    
    }
    
    

    发布方

    package com.swagger.ranger.redis.Pub_Sub;
    
    import redis.clients.jedis.Jedis;
    
    /*******************************************************************************
     * @Copyright (C), 2018-2019,github:Swagger-Ranger
     * @FileName: RedisPublisher
     * @Author: liufei32@outlook.com
     * @Date: 2019/3/24 18:29
     * @Description: Redis的发布者
     * @Aha-eureka:  redis消息的发布者不需要继承或者实现某个类和接口,Jedis类直接就可以调用publish()方法发布消息
     *******************************************************************************/
    
    public class RedisPublisher {
    
        public static void main( String[] args ) {
            Jedis jedis = new Jedis("120.27.227.49", 6379);
            jedis.publish("channel1", "Swagger-Ranger");
    
            jedis.close();
        }
    }
    
    

    本博客为Swagger-Ranger的笔记分享,文中源码地址: https://github.com/Swagger-Ranger
    欢迎交流指正,如有侵权请联系作者确认删除: liufei32@outlook.com

  • 相关阅读:
    在spring官网上下载历史版本的spring插件,springsource-tool-suite
    转载---VB DorpDownList控件 添加选项
    VB,将"秒"转成"时分秒"格式
    VB.NET 改变datatable数据类型
    转载--- C# 图片与base64编码 互相转换
    转载--- php5.6:Call to undefined function curl_init()的解决办法
    转载--- navicat12破解版(英文、中文)
    转载---mysql导出事件、存储过程、函数、库表
    C# 读取mysql blob字段(两种方式)
    转载---安装mysql5.7,遇到的问题
  • 原文地址:https://www.cnblogs.com/Swagger-Ranger/p/10671059.html
Copyright © 2020-2023  润新知