文档章节

redis 发布与定阅

山下狮子
 山下狮子
发布于 2014/06/19 11:26
字数 1173
阅读 183
收藏 1

直接看发布与定阅,容易让人迷糊。什么发布者和消息订阅者之间的耦合,什么通道,


先看下面的表格,等你照着做一遍就知道是怎么回事了。(linux  平台下)

先启动~$ redis-server

启动一个client1

在启动 client2

在启动 client3

然后对应下面的表进行输入红色的命令,注意观察每个客户端的显示

NOTE:

Client (一个命令行窗口就叫一个client) redis-cli命令就是启动一个客户端



Client 1(一个命令行窗口就叫一个client)

Client 2

Client 3



redis 127.0.0.1:6379>subscribe tv1

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

redis 127.0.0.1:6379>subscribe tv1 tv2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "subscribe"

2) "tv2"

3) (integer) 2






redis 127.0.0.1:6379>publish tv1 program1

(integer) 2

redis 127.0.0.1:6379>



redis 127.0.0.1:6379> subscribe tv1

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "message"

2) "tv1"

3) "program1"

redis 127.0.0.1:6379> subscribe tv1 tv2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "subscribe"

2) "tv2"

3) (integer) 2

1) "message"

2) "tv1"

3) "program1"






redis 127.0.0.1:6379>publish tv2 program2

(integer) 1

redis 127.0.0.1:6379>



redis 127.0.0.1:6379> subscribe tv1

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "message"

2) "tv1"

3) "program1"

redis 127.0.0.1:6379> subscribe tv1 tv2

Reading messages... (press Ctrl-C to quit)

1) "subscribe"

2) "tv1"

3) (integer) 1

1) "subscribe"

2) "tv2"

3) (integer) 2

1) "message"

2) "tv1"

3) "program1"

1) "message"

2) "tv2"

3) "program2"



正式的解释来了,先看命令。

SUBSCRIBE

英文的意思就是定阅,这里也是定阅

client1 >subscribe tv1  tv1就是我要定阅,关注它的相关信息,就是你有什么事,我都可以知道。就和关注明星微博一样,你是他的粉丝了,他要是发个微博,拍了个照片,你是不是就有提示你去看。问题是明星哪里来的那,tv1总不能胡编乱造吧,等会就知道了。

client2>subscribe tv1 tv2     我喜欢好几个明星,那我就关注好几个,只要我想关注的我就关注,于是我就关注了  tv1 tv2


client3>publish tv1 program1     明星来了,publish就是定义明星(publish其实是发布的意思,明星就是频道的意思,频道就是影视频道,娱乐频道,法制频道),这句话连起来就是 定义了一个明星,明星说了句 program1.


client1>刚才谁关注了tv1了,是client1吧。于是就收到了tv1明星的话,

                1) "message"   代表是收消息

                2) "tv1"            我关注了谁,哪个明星在活动

                3) "program1"    这个明星干了嘛


client2>我也关注了 tv1啊,不能把我丢下。于是他也收到了tv1 说的话      

            1) "message"

            2) "tv1"

            3) "program1"

client3>这时,客户端3又一位明星发布了一句话(publish tv2 program2) ,是又一位明星哦。它说了句program2

                    谁关注了新明星那,只有客户端2

client1>

client2我收到了新明星tv2的消息                 

                    1) "message"

                    2) "tv2"

                    3) "program2"



信息的格式:

redis 127.0.0.1:6379[2]> subscribe tv1      #  关注tv1
Reading messages... (press Ctrl-C to quit)      #提示你Ctrl C 退出,退出就收不到信息了
1) "subscribe"              #  代表 是定阅
2) "tv1"                          #定阅频道
3) (integer) 1                #  成功执行了一次定阅,也代表关注了一个频道,你可以看客户端2的区别
1) "message"               #代表接受信息
2) "tv1"                           #接受谁的,肯定是你关注其中之一的
3) "program1"             #频道发布的内容


redis 127.0.0.1:6379> publish tv1 program1   #发布一个频道 和信息
(integer) 2        #有几个人在关注频道tv1


订阅模式

redis> PSUBSCRIBE news.*

客户端将收到来自 news.art.figurative  news.music.jazz 等频道的信息。

客户端订阅的模式里面可以包含多个 glob 风格的通配符, 比如 *  ?  [...] , 等等

redis> PUNSUBSCRIBE news.*

将退订 news.* 模式, 其他已订阅的模式不会被影响。

通过频道和模式接收同一条信息

如果客户端订阅的多个模式匹配了同一个频道, 或者客户端同时订阅了某个频道、以及匹配这个频道的某个模式, 那么它可能会多次接收到同一条信息。

举个例子, 如果客户端执行了以下命令:

SUBSCRIBE foo
PSUBSCRIBE f*

那么当有信息发送到频道 foo 时, 客户端将收到两条信息: 一条来自频道 foo ,信息类型为 message ; 另一条来自模式 f* ,信息类型为pmessage 

订阅总数

在执行 SUBSCRIBE  UNSUBSCRIBE  PSUBSCRIBE  PUNSUBSCRIBE 命令时, 返回结果的最后一个元素是客户端目前仍在订阅的频道和模式总数。

当客户端退订所有频道和模式, 也即是这个总数值下降为 0 的时候, 客户端将退出订阅与发布状态。


© 著作权归作者所有

山下狮子
粉丝 24
博文 115
码字总数 58167
作品 0
东城
程序员
私信 提问
Python client for Redis 官翻文档2.10.1(一)

Python client for Redis key-value store redis针对python的客户端, github地址:https://github.com/andymccurdy/redis-py/ 安装: 虽然称redis的python客户端称为redis-py,实际安装时的......

山下狮子
2014/06/19
1K
0
MQTT 主题与主题过滤

MQTT 主题与主题过滤 Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流2017-12-261 阅读 过滤主题 1、topic 定阅与发布必须要有主题,只有当定阅了某个主题后,才能收到相应主题的paylo...

Love冥天个人博客-关注IT|PHP|互联网|php个人博客交流
2017/12/26
0
0
typecho插件编写教程1 - 从HelloWorld说起

/** Hello World * @package HelloWorld @author qining @version 1.0.0 @link http://typecho.org */ ... ......

thinkyoung
2015/06/17
0
0
Redis 4.0.2 和 3.2.11 发布,修复了隐藏的重要错误

Redis 4.0.2 和 3.2.11 已发布。发布说明显示,本次属于紧急更新,两个版本都修复了隐藏的重要错误。建议升级。 详情请参阅: Redis 4.0.2 发布说明:https://raw.githubusercontent.com/ant...

淡漠悠然
2017/09/22
1K
2
laravel扩展使用redis消息发布与订阅

laravel扩展使用redis消息发布与订阅 业务场景 shell测试redis发布publish和订阅subscribe 结合laravel订阅消息并处理 业务场景 项目业务场景中需要去订阅兄弟部门的数据,技术栈这块经过商讨...

似阳似海
2018/12/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周一乱弹 —— 熟悉的味道,难道这就是恋爱的感觉

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @xiaoshiyue :好久没分享歌了分享张碧晨的单曲《今后我与自己流浪》 《今后我与自己流浪》- 张碧晨 手机党少年们想听歌,请使劲儿戳(这里)...

小小编辑
今天
140
7
SpringBoot中 集成 redisTemplate 对 Redis 的操作(二)

SpringBoot中 集成 redisTemplate 对 Redis 的操作(二) List 类型的操作 1、 向列表左侧添加数据 Long leftPush = redisTemplate.opsForList().leftPush("name", name); 2、 向列表右......

TcWong
今天
18
0
排序––快速排序(二)

根据排序––快速排序(一)的描述,现准备写一个快速排序的主体框架: 1、首先需要设置一个枢轴元素即setPivot(int i); 2、然后需要与枢轴元素进行比较即int comparePivot(int j); 3、最后...

FAT_mt
昨天
4
0
mysql概览

学习知识,首先要有一个总体的认识。以下为mysql概览 1-架构图 2-Detail csdn |简书 | 头条 | SegmentFault 思否 | 掘金 | 开源中国 |

程序员深夜写bug
昨天
11
0
golang微服务框架go-micro 入门笔记2.2 micro工具之微应用利器micro web

micro web micro 功能非常强大,本文将详细阐述micro web 命令行的功能 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架...

非正式解决方案
昨天
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部