redis发布(pub)、订阅(sub)模式
前言:redis提供了很多种功能或模式,可以运用在不同的场景下,今天记录下redis中的发布、订阅模式的基本使用
注redis安装及主从搭建请参考我其他博文http://www.cnblogs.com/longjee/p/8652374.html,本文不再赘述
- redis中的发布订阅由三部分组成。发布者(生产者)、通道(类似于topic)、订阅者(消费者),具体结构如下图:

- redis中实现发布订阅
- 首先我们打开两个客户端 A、B
- A客户端使用subscribe 命令订阅通道test

- 然后客户端B使用publish 命令发送消息

- 这个时候客户端A能自动接收到消息

- 至此,使用redis简单的搭建一个发布订阅服务就完成了。
- 使用Java基于redis实现发布订阅
- 首先我们新建一个maven的项目。然后建立三个属于该项目的module: redis-pub、redis-sub、redis-common

- 在redis-pubsub(下面简称父项目)的pom中添加jedis的依赖 ,本人使用2.9.0版本

- redis-common是我写的一个公共组件
- 下面开始写sub端(贴出部分为核心代码)
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);
} }- pub端代码(部分代码)
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);
}
}- 测试:使用postman进行测试。结果如下。

至此,使用Java搭建一个简单的发布订阅模式已经完成!
如有什么不对之处,敬请指教。
上面为关键部分代码,完整代码请到我的github:https://github.com/wylsource/redis-pubsub
redis发布(pub)、订阅(sub)模式的更多相关文章
- 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...
- Redis——发布和订阅
发布与订阅(又称pub/sub),订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字符串消息(binary string message).每 ...
- Redis - 发布和订阅
一.概述 1). 发布和订阅是一种消息通信模式. 2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式. 二.发布和订阅 订阅命令: // 订阅一个或多个频道 // 返回值:v ...
- redis发布与订阅
发布与订阅 除了实现任务队列外, Redis还提供了一组命令可以让开发者实现"发布/订阅"(publish/subscribe)模式. "发布/订阅"模式同样可 ...
- redis 发布和订阅实现
参考文献 15天玩转redis -- 第九篇 发布/订阅模式 <Redis设计与实现> 命令简介 在redis用户手册中,跟发布订阅相关的命令有如下的六个: PSUBSCRIBE PUBL ...
- redis 发布与订阅原理分析
前言:用了redis也有一段时间了,但是发布与订阅的使用频率也不高,趁着这次空闲,深究下redis的发布与订阅模式. 一.订阅频道和信息发布 功能说明:Redis 的 SUBSCRIBE 命令可以让客 ...
- Redis 发布与订阅 消息
基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务. ...
- Redis 发布与订阅模式
subscribe 订阅 publish 发布 频道 发布内容
- 03 Redis发布与订阅
以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...
- php swoft redis 发布和订阅
//订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...
随机推荐
- js9:设置cookie,读取cookie,删除cookie,保存cookie时间,String,Date对象
原文发布时间为:2008-11-11 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...
- DATASNAP高效的FIREDAC数据序列和还原
变量定义: varFDConnection: TFDConnection;qCustomers: TFDQuery; qOrders: TFDQuery;FDSchemaAdapter: TFDSch ...
- OpenWRT解决因PPPOE丢包导致频繁掉线问题
其关键在于这两个参数 lcp-echo-interval 1 #发送间隔秒 lcp-echo-failure 5 #5次未响应断开 因为OpenWRT默认的设置为1秒发送一次 5次没有响应就 ...
- 【深度探索C++对象模型】data语义学
class X{}; class Y :public virtual X{}; class Z :public virtual X{}; class A :public Y, public Z{}; ...
- MySQL Study之--Percona Server版本号
MySQL Study之--Percona Server版本号 1.简单介绍 Percona 为 MySQL 数据库server进行了改进.在功能和性能上较 MySQL 有着非常显著的提升. ...
- Android开发——本地验证码的简易实现
0. 前言 验证码无处不在.有人问我,你知道达芬奇password以下是什么吗,对.答案就是达芬奇验证码. 验证码一个最基本的作用就是防止恶意暴力破解登录,防止不间断的登录尝试,事实上能够在se ...
- Linux Shell_test
test: 测试Shell脚本里的条件,通过推出状态返回其结果.用法: test [ expression ] 或 [ [ expression ] ] 注意空格test表达式:是则为真 ...
- 机器学习笔记之PCA-SIFT总结
不多说,直接上干货! PCA-SIFT算法在描述子构建上作了创新,主要是 将统计学中的主成分分析(PCA)应用于对描述子向量的降维,以提高匹配效率 . PCA 的原理是:一般有效信号的方差大,噪声的方 ...
- 生成 hibernate 映射文件和实体类
创建web工程,使用Hibernate的时候,在工程里一个一个创建实体类太麻烦,浪费时间,现在教大家如何用MyEclipse自动生成Hibernate映射文件及实体类 方法/步骤 创建数据库,创建 ...
- XMU 1050 Diffuse Secret 【最短路】
1050: Diffuse Secret Time Limit: 500 MS Memory Limit: 64 MBSubmit: 10 Solved: 8[Submit][Status][We ...