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 ...
随机推荐
- java常用工具类
http://www.cnblogs.com/langtianya/p/3875124.html
- 【iCore3 双核心板】例程三十四:U_DISK_IAP_ARM实验——更新升级STM32
实验指导书及代码包下载: http://pan.baidu.com/s/1pKabR7P iCore3 购买链接: https://item.taobao.com/item.htm?id=524229 ...
- UrlRewriteFilter
UrlRewriteFilter是一个改写URL的Java Web过滤器,可见将动态URL静态化.适用于任何Java Web服务器(Resin,Jetty,JBoss,Tomcat,Orion等).与 ...
- Access项目文件的版本控制
简单记录一下使用MS Access SVN(以下简称AccessSVN)的步骤吧. AccessSVN在http://accesssvn.codeplex.com/,该产品的目的是:Access SV ...
- .Net分布式架构(一):Nginx实现负载均衡
一:负载均衡简介 负载均衡,英文名称为Load Balance,其意思就是分摊到多个操作单元上进行执行,例如Web服务器.FTP服务器.企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务. ...
- Linux中的软硬链接
说到Linux中的软硬链接,就必须谈一下Linux的文件系统的组成的重要部分iNode和block. 首先是iNode,先用一张图了解一下iNode在Linux文件系统中的地位: Linux中的文件的 ...
- 《30天自制操作系统》14_day_学习笔记
harib11a--harib11c: 继续测试性能:我们在harib10h中进行了定时链表结构的改进“消除了移位处理”.下面我们设定490个定时器(它们都被设定启动50天才超时)来测试一下改进的效果 ...
- Latex 学习
Latex 学习 @(05.2 Latex)[latex][基础教程] 这篇文章是关于latex基础教程.pdf的一个总结. 基本知识 基础 1. 空格 多个空格会被视为一个空格 单个回车会被视为一个 ...
- Fitnesse在eclipse中的调试
需要在Fitnesse的wik中添加: '''此句话专门用来Debug'''!define COMMAND_PATTERN {java -Xdebug -Xrunjdwp:transport=dt_s ...
- 0506 Scrum 项目1.0
团队名称:√3 团队目标:全力完成这次的项目 团队口号:我要改变世界,改变自己!!! 演讲稿:我们的产品 鸡汤精选 是为了解决 当下社会出现的太多的负能量使得人们的内心十分 的痛苦, 他们需要强大的正 ...