前言:redis提供了很多种功能或模式,可以运用在不同的场景下,今天记录下redis中的发布、订阅模式的基本使用

  注redis安装及主从搭建请参考我其他博文http://www.cnblogs.com/longjee/p/8652374.html,本文不再赘述

  • redis中的发布订阅由三部分组成。发布者(生产者)、通道(类似于topic)、订阅者(消费者),具体结构如下图:

  • redis中实现发布订阅
  1. 首先我们打开两个客户端 A、B
  2. A客户端使用subscribe 命令订阅通道test
  3. 然后客户端B使用publish 命令发送消息
  4. 这个时候客户端A能自动接收到消息
  5. 至此,使用redis简单的搭建一个发布订阅服务就完成了。
  • 使用Java基于redis实现发布订阅
  1. 首先我们新建一个maven的项目。然后建立三个属于该项目的module: redis-pub、redis-sub、redis-common
  2. 在redis-pubsub(下面简称父项目)的pom中添加jedis的依赖 ,本人使用2.9.0版本
  3. redis-common是我写的一个公共组件
  4. 下面开始写sub端(贴出部分为核心代码)
  5.  package com.star4j.redissub.client;
    
     import com.star4j.rediscommon.helper.JedisConnectionHelper;
    import redis.clients.jedis.Jedis;
    import redis.clients.jedis.JedisPubSub; /**
    * @Author: WuYL
    * @Description: 实现订阅功能
    * @Date: Create in 2018/3/29 15:21
    * @Modified By:
    */
    public abstract class SubClient extends JedisPubSub{ private Jedis jedis = null; public SubClient(Jedis jedis){
    this.jedis = jedis;
    } protected SubClient(){
    jedis = JedisConnectionHelper.get();
    } /**
    * 订阅一个通道 (必须实现该类才行)
    * @param channal
    */
    public final void sub(String channal){
    jedis.subscribe(this, channal);
    } /**
    * 有消息被推送过来时调用(子类实现)
    * @param channel
    * @param message
    */
    public abstract void message(String channel, String message); @Override
    public void onMessage(String channel, String message) {
    this.message(channel, message);
    } }
  6. pub端代码(部分代码)
  7.  package com.star4j.redispub.client;
    
     import com.star4j.rediscommon.helper.JedisConnectionHelper;
    import redis.clients.jedis.Jedis; /**
    * @Author: WuYL
    * @Description: 发布端实现
    * @Date: Create in 2018/3/29 15:41
    * @Modified By:
    */
    public class PubClient { /**
    * 发布消息
    * @param channel
    * @param message
    */
    public static void pub(String channel, String message){
    Jedis jedis = JedisConnectionHelper.get();
    jedis.publish(channel, message);
    JedisConnectionHelper.close(jedis);
    }
    }
  8. 测试:使用postman进行测试。结果如下。

至此,使用Java搭建一个简单的发布订阅模式已经完成!

如有什么不对之处,敬请指教。

上面为关键部分代码,完整代码请到我的github:https://github.com/wylsource/redis-pubsub

redis发布(pub)、订阅(sub)模式的更多相关文章

  1. 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ

    本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...

  2. Redis——发布和订阅

    发布与订阅(又称pub/sub),订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字符串消息(binary string message).每 ...

  3. Redis - 发布和订阅

    一.概述 1). 发布和订阅是一种消息通信模式. 2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式. 二.发布和订阅 订阅命令: // 订阅一个或多个频道 // 返回值:v ...

  4. redis发布与订阅

    发布与订阅 除了实现任务队列外, Redis还提供了一组命令可以让开发者实现"发布/订阅"(publish/subscribe)模式. "发布/订阅"模式同样可 ...

  5. redis 发布和订阅实现

    参考文献 15天玩转redis -- 第九篇 发布/订阅模式 <Redis设计与实现> 命令简介 在redis用户手册中,跟发布订阅相关的命令有如下的六个: PSUBSCRIBE PUBL ...

  6. redis 发布与订阅原理分析

    前言:用了redis也有一段时间了,但是发布与订阅的使用频率也不高,趁着这次空闲,深究下redis的发布与订阅模式. 一.订阅频道和信息发布 功能说明:Redis 的 SUBSCRIBE 命令可以让客 ...

  7. Redis 发布与订阅 消息

    基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务. ...

  8. Redis 发布与订阅模式

    subscribe  订阅 publish   发布   频道    发布内容

  9. 03 Redis发布与订阅

    以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...

  10. php swoft redis 发布和订阅

    //订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...

随机推荐

  1. 《TCP/IP详解卷1:协议》——第3章 IP:网际协议(转载)

    1.引言 IP是TCP/IP协议族中最核心的协议.所有的TCP.UDP.ICMP及IGMP数据都以IP数据报格式传输.IP提供不可靠. 无连接的数据报传送服务. (1)不可靠 它不能保证IP数据报能成 ...

  2. Java函数式接口Consumer

    Consumer是java8提供的函数式接口之一,意思为消费者,接受参数而不返回值 void accept(T t); default Consumer<T> andThen(Consum ...

  3. mysql查看存储过程show procedure status;

    1.mysql查看存储过程(函数) 2.MySQL查看触发器 查看触发器 语法:SHOW TRIGGERS [FROM db_name] [LIKE expr] 实例:SHOW TRIGGERS\G ...

  4. Failed to load session “ubuntu" 问题解决总结

    最近在用Ubuntu系统,但因为手欠,将unity-2d给删除了,导致总是进不了图形界面,登陆之后显示failed to load session "ubuntu“,返回之后又回到登录界面. ...

  5. CentOS5 忘记root密码的解决办法

    方法/步骤   1 开机启动的时候,按“E”进入如下界面. 2 选择相应的内核,再次按“E”,出现下图,选择第二项,再次按“E”键 3 在尾部加:“空格+single”(如图),Enter.图如下: ...

  6. ZOJ 2706 Thermal Death of the Universe (线段树)

    题目链接:ZOJ 2706 Thermal Death of the Universe (线段树) 题意:n个数.m个操作. 每一个操作(a,b)表示(a,b)全部值更新为这个区间的平均数:1.当前的 ...

  7. Android耳机线控具体解释,蓝牙耳机button监听(仿酷狗线控效果)

    转载请注明出处:http://blog.csdn.net/fengyuzhengfan/article/details/46461253 当耳机的媒体按键被单击后.Android系统会发出一个广播.该 ...

  8. anaconda中新rdkit安装

    1. 执行 conda create -c rdkit -n my-rdkit-env rdkit 该步骤经测试发现需FQ,而模拟器无法完成FQ(至少我不知道方法), 因此在本机上配置好环境后复制粘贴 ...

  9. centos7 rpm 安装MySQL5.6

    系统centos7,安装MySQL,出错,百度了一大堆,几乎都是通过yum安装的MySQL,我想说的是,通过yum自动安装的话系统自己会帮你做很多事情,相关联的包也会下下来,相当于替你省去了很多事情, ...

  10. angularjs学习之六(angularjs中directive指令的一般编程事件绑定 模板使用等)

    angular js 中模板的使用.事件绑定以及指令与指令之间的交互 相应教学视频地址(需FQ):v=aG8VD0KvUw4">angularjs教学视频 <!doctype h ...