Redis - 发布和订阅
一、概述
1). 发布和订阅是一种消息通信模式。
2). 优点:使消息订阅者和消息发布者耦合度降低,类似设计模式中的观察者模式。
二、发布和订阅
订阅命令:
// 订阅一个或多个频道
// 返回值:value_1 为 “subcribe” 表示订阅成功,value_2 为订阅的频道名称,value_3 表示当前订阅的频道个数
subscribe channel1 channel2 channel3 ...
// 模式订阅
// 返回值:value_1 为 “psubcribe” 表示订阅成功,value_2 为订模式订阅的 pattern,value_3 表示当前订阅的频道个数
psubscribe abc* xyz* ...
发布命令:
// 发布命令
publish channel msg
启动订阅者 X 和订阅者 Y,分别发出订阅命令,如下面两张图片:


启动发布者,发布如下消息:

订阅者 X 和订阅者 Y 都收到了订阅消息:


取消订阅(取消订阅在官方给的客户端上是无法模拟的)
UNSUBSCRIBE cctv-
PUNSUBSCRIBE cctv-*
查看订阅
// 查看订阅的所有频道
pubsub channels;
pubsub channels msg*;
// 查看该频道的订阅人数
pubsub numsub channel1 channel2 ... ;

三、编程展示 Redis 的发布和订阅
编程展示:
public class MySub extends JedisPubSub{
@Override
public void onMessage(String channel, String msg) {
System.out.println("onMessage - " + channel +" - " +msg);
}
@Override
public void onPMessage(String pattern, String channel, String msg) {
System.out.println("onPMessage - " + pattern +" - "+ channel +" - " +msg);
}
@Override
public void onPSubscribe(String channel, int msg) {
System.out.println("onPsubscribe - " + channel +" - "+ msg);
}
@Override
public void onPUnsubscribe(String arg0, int arg1) {}
@Override
public void onSubscribe(String channel, int number) {
System.out.println("onSubscribe - " + channel +" - "+ number);
}
@Override
public void onUnsubscribe(String arg0, int arg1) {}
}
订阅者 A
public class SubClient {
public static void main(String[] args) {
MySub sub = new MySub();
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.subscribe(sub, "cctv-1");
}
}
订阅者 B (模式订阅)
public class PsubClient {
public static void main(String[] args) {
MySub sub = new MySub();
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.psubscribe(sub, "cctv*");
}
}
发布者 C
public class PubClient {
public static void main(String[] args) {
Jedis jedis = new Jedis("127.0.0.1", 6379);
jedis.publish("cctv-1", "hello,this is cctv-1");
}
}
依次运行客户端 ABC
A 端输出
onSubscribe - cctv-1 - 1
onMessage - cctv-1 - hello,this is cctv-1
B 端输出
onPsubscribe - cctv* - 1
onPMessage - cctv* - cctv-1 - hello,this is cctv-1
Redis - 发布和订阅的更多相关文章
- 文成小盆友python-num12 Redis发布与订阅补充,python操作rabbitMQ
本篇主要内容: redis发布与订阅补充 python操作rabbitMQ 一,redis 发布与订阅补充 如下一个简单的监控模型,通过这个模式所有的收听者都能收听到一份数据. 用代码来实现一个red ...
- redis发布与订阅
发布与订阅 除了实现任务队列外, Redis还提供了一组命令可以让开发者实现"发布/订阅"(publish/subscribe)模式. "发布/订阅"模式同样可 ...
- redis 发布和订阅实现
参考文献 15天玩转redis -- 第九篇 发布/订阅模式 <Redis设计与实现> 命令简介 在redis用户手册中,跟发布订阅相关的命令有如下的六个: PSUBSCRIBE PUBL ...
- redis 发布与订阅原理分析
前言:用了redis也有一段时间了,但是发布与订阅的使用频率也不高,趁着这次空闲,深究下redis的发布与订阅模式. 一.订阅频道和信息发布 功能说明:Redis 的 SUBSCRIBE 命令可以让客 ...
- Redis——发布和订阅
发布与订阅(又称pub/sub),订阅者(listener)负责订阅频道(channel),发送者(publisher)负责向频道发送二进制字符串消息(binary string message).每 ...
- php swoft redis 发布和订阅
//订阅 public function subscribe() { /* @var \Swoft\Redis\Redis $redis */ $redis = App::getBean(\Swoft ...
- Redis 发布与订阅模式
subscribe 订阅 publish 发布 频道 发布内容
- Redis 发布与订阅 消息
基于Redis消息队列-实现短信服务化 1.Redis实现消息队列原理 常用的消息队列有RabbitMQ,ActiveMQ,个人觉得这种消息队列太大太重,本文介绍下基于Redis的轻量级消息队列服务. ...
- 03 Redis发布与订阅
以qq群的公告,单个发布者,多个收听者为例 发布/订阅 实验 发布订阅的命令 PUBLISH channel msg 将信息 message 发送到指定的频道 channel SUBSCRIBE ch ...
随机推荐
- python 安装 twisted 库
pip 安装twisted库需要先安装依赖包,不然报"error: command 'gcc' failed with exit status 1" # yum install g ...
- GDC2016 【全境封锁】的全局照明技术
现在全力支持公司的GAD平台了,很多的内部分享也可以放出来 http://gad.qq.com/article/detail/7159232
- Customizing the Editor
Use the General, Text Editor, Options Dialog Box to customize the appearance and functionality of th ...
- ant copy file
<project name="selftask" default="docopy" basedir="."> <descr ...
- Android WebView常见问题及解决方案汇总
Android WebView常见问题解决方案汇总: 就目前而言,如何应对版本的频繁更新呢,又如何灵活多变地展示我们的界面呢,这又涉及到了web app与native app之间孰优孰劣的争论. 于是 ...
- 贴片三极管-MOS管型号手册
详细请查阅PDF: http://files.cnblogs.com/files/BinB-W/贴片三极管-MOS管型号手册.pdf
- LeetCode Read N Characters Given Read4 II - Call multiple times
原题链接在这里:https://leetcode.com/problems/read-n-characters-given-read4-ii-call-multiple-times/ 题目: The ...
- 小试牛刀C#作为脚本语言执行解密
背景 我们知道Unity3d是通过C#脚本语言的形式来实现游戏的逻辑代码编写,同样SCOTT服务器也设置了通过C#脚本来实现游戏逻辑,但是本文并不是想真正分析解密他们的运行机制,只是想通过自己的一个需 ...
- 决策树Decision Tree 及实现
Decision Tree 及实现 标签: 决策树熵信息增益分类有监督 2014-03-17 12:12 15010人阅读 评论(41) 收藏 举报 分类: Data Mining(25) Pyt ...
- MYSQL里使用正则的速度快还是使用like模糊查询语句快?
LIKE 会略快一些.但显然LIKE的功能无法与REGEXP相比. 另外是索引的问题,LIKE有可能使用索引但REGEXP则很难.