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脚本模拟登录网页之CSDN篇
1. 通过Firefox配合插件Tamper Date获取登录时客户端向服务器端提交的数据, 并且发现lt和execution这两个字段每次登录时都不一样. POSTDATA=username=you ...
- 我的PhoneGap安装配置经历
一.PhoneGap简介 PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能够利用 iPhone,Android,Palm,S ...
- mac地址、IP地址和端口号
看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正: 在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址.IP地址和端口号. mac地址是在 ...
- Qt字符串类——1.字符串常用的几种操作
字符串有如下几个操作符: (1)QString提供了一个二元的"+"操作符用于组合两个字符串,并提供了一个"+="操作符用于将一个字符串追加到另一个字符串的末尾 ...
- blockdev命令和blkid命令
blockdev命令和blkid命令 http://www.jb51.net/LINUXjishu/310389.html block相关的命令 这篇文章主要介绍了Linux blockdev命令设置 ...
- centos 下 安装zookpeer
tar xvf zookeeper-3.4.6.tar.gz cd /usr/local/zookpeer/ mkdir /var/zookpeer mkdir /var/zookpeer/data ...
- EF 之 MVC 排序,查询,分页 Sorting, Filtering, and Paging For MVC About EF
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 上篇博客我们学习了EF CodeFirst增删改查 ...
- 清除div中内容
$.ajax({ url: "SearchSN.aspx", data: "SN=" + $("#txtS ...
- App Store有哪些原因会影响app应用上架呢?(分享)
App Store对于应用上架的审核是非常严格的,很可能一个没有注意到的细节,或者一个你根本没想想到的原因就会导致你的应用上架失败.而排除这些无可避免的错误以外,还有一些导致应用上架失败的原因,非常常 ...
- Leetcode: Number of Segments in a String
Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...