redis入门(3):redis发布订阅命令

试验环境:

参照:

一、概念说明

发布和订阅其实就像是你声明一下自己订阅了哪个报纸,这样报纸印发了就会自动送到你这里来。
redis操作要点:

  • 使用多个客户端同时连接到redis服务,在任意一个客户端上可以一次性声明要订阅的一个或多个频道,然后这个客户端就进入了阻塞状态。
  • 在另外的客户端上发布一条消息到指定的频道,这时会发现订阅这个频道的客户端上会立即显示消息内容
  • 频道的创建和消失是自动的,具体来说:当存在客户端订阅xxxx频道时,xxxx频道就存在;当不存在客户端订阅xxxx频道时,就认为xxxx频道消失了。

模型图示(摘自:https://www.runoob.com/redis/redis-pub-sub.html):

在这里插入图片描述
在这里插入图片描述

二、操作实例

2.1 同时打开四个redis客户端(A/B/C/D),如下图所示:

在这里插入图片描述

2.2 客户端A订阅两个频道(back.java、back.c#),进入阻塞状态
127.0.0.1:6500> subscribe back.java back.c#
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "back.java"
3) (integer) 1
1) "subscribe"
2) "back.c#"
3) (integer) 2
2.3 客户端B订阅两个频道(web.html web.css ),进入阻塞状态
127.0.0.1:6500> subscribe web.html web.css
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "web.html"
3) (integer) 1
1) "subscribe"
2) "web.css"
3) (integer) 2
2.4 客户端C订阅了3个模式(back.* web.* news.yule),进入阻塞状态
127.0.0.1:6500> psubscribe back.* web.* news.yule
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "back.*"
3) (integer) 1
1) "psubscribe"
2) "web.*"
3) (integer) 2
1) "psubscribe"
2) "news.yule"
3) (integer) 3

2.2~2.4操作后,界面如下:
在这里插入图片描述

2.5 客户端D查看redis服务上订阅的频道数量:pubsub channels
127.0.0.1:6500> pubsub channels
1) "web.html"
2) "back.c#"
3) "back.java"
4) "web.css"

注意:这里查看的是订阅的频道,那么【back.*】、【web.*】和【news.yule】这三个模式是不在里面的。

2.6 客户端D查看redis服务给定频道的订阅者数量:pubsub numsub back.java web.html
127.0.0.1:6500> pubsub numsub back.java web.html
1) "back.java"
2) (integer) 1
3) "web.html"
4) (integer) 1
127.0.0.1:6500> pubsub numsub
(empty list or set)
127.0.0.1:6500> pubsub numsub back.*
1) "back.*"
2) (integer) 0

注意:这里必须写上具体的频道名称,不写的话返回的是空结果。
另外:频道名称和模式不同,这里写“back.*”是不会有结果的。

2.7 客户端D查看订阅模式的数量:pubsub numpat
127.0.0.1:6500> pubsub numpat
(integer) 3

注意:这里的三个模式就是客户端C使用“psubscribe”命令订阅的三个模式:

  1. back.*
  2. web.*
  3. news.yule
2.8 客户端D发布消息到back.java频道:publish back.java “java is a good language”
127.0.0.1:6500> publish back.java "java is a good language"
(integer) 2

发布后能看到A端、C端立即显示了发布的消息,如下图:
在这里插入图片描述

2.9 指示客户端退订某个频道:unsubscribe back.java back.c#

在实验的时候,发现客户端并没有退订频道,具体表现为:
执行unsubscribe 命令后,订阅的客户端没有反应,当publish消息到unsubscribe的频道后,客户端仍然能接收到消息。。。
这里可以认为:
当客户端退出或主动退订的时候才会生效,redis服务端无法主动退订频道。

2.10 指示客户端退订某个模式:punsubscribe back.*

和2.9中类似的问题,暂时也认为服务端无法主动退订模式频道吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jackletter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值