python redis 订阅发布_Redis发布订阅及客户端编程

本文详细解析了发布订阅模型在应用级和系统级的作用,通过邮局与读者订阅杂志的比喻阐述原理,并介绍了Redis中的发布订阅机制,包括客户端编程示例。重点展示了如何利用Redis的PSUBSCRIBE、UNSUBSCRIBE等命令来管理订阅和取消订阅,以及如何使用模式匹配和查看订阅信息。
摘要由CSDN通过智能技术生成
94c5478770d922ad8f2aa0721f5b5a5f.png

发布订阅模型

在应用级其作用是为了减少依赖关系,通常也叫观察者模式。主要是把耦合点单独抽离出来作为第三方,隔离易变化的发送方和接收方。

发送方:只负责向第三方发送消息。(杂志社把读者杂志交给邮局)

接收方:被动接收消息。(1:向邮局订阅读者杂志,2:门口去接邮过来的杂志)

第三方作用是:存储订阅杂志的接收方,并在杂志过来时送给接收方。 (邮局)

示例,发送方把杂志放到邮局里面:

if (QA.AddBug()) EmailNotify();

接收方到邮局登记地址,有杂志过来时送货上门:

 EmailNotify += () => { Console.WriteLine("A君"); }; EmailNotify += () => { Console.WriteLine("B君"); };

第三方邮局接受读者杂志订阅,收到杂志时进行派送:

 public delegate void MessageHandler(); public static event MessageHandler EmailNotify; if (QA.AddBug()) EmailNotify();

当我们把观察者模式放大到系统级时,就是发布订阅(pub/sub)了。 主要是用来降低发布者和订阅者的耦合,提高前端系统吞吐量。结构如图:

237f312be6a6bcf433572566d0f29b66.png

Redis中的发布订阅

Redis实现完整的发布订阅范式,就是说任何一台redis服务器,启动后都可以当做发布订阅服务器。

普通订阅

启动订阅者client。

redis-cli.exe -h 127.0.0.1 -p 6379

订阅bar频道。格式:SUBSCRIBE name1 name2。

成功订阅回复,分别对应订阅类型、订阅频道、订阅数量。

127.0.0.1:6379> SUBSCRIBE barReading messages... (press Ctrl-C to quit)1) "subscribe"2) "bar"3) (integer) 1

新起个发布者client,发送消息。格式:publish channelName Message。

127.0.0.1:6379> publish bar val(integer) 1

订阅client回复,分别对应消息类型,频道,消息。

1) "message"2) "bar"3) "val"

图例

efb678a20f9d52f9cd548c3b26419349.png

模式订阅

Redis支持模式匹配订阅,*为模糊匹配符。

订阅所有频道的消息

PSUBSCRIBE * 

订阅以news.开头的所有频道。

PSUBSCRIBE news.*

取消订阅

取消普通订阅和取消模式订阅的命令。

UNSUBSCRIBE barPUNSUBSCRIBE ba*

取消在官方提供的连接工具中无法模拟的。

查看订阅信息

查看订阅消息是redis在2.8中心增加的命令之一。

pubsub channels [pattern] 。

返回当前服务器被订阅的所有频道。

127.0.0.1:6379> pubsub channels1) "bar"

指定匹配参数,返回与模式匹配的所有频道。

127.0.0.1:6379> pubsub channels ba*1) "bar"

pubsub numsub [channel-1 channel-2 ...channel-n]

接受任意多个频道作为输入参数,返回这些频道的订阅者数量。

127.0.0.1:6379> pubsub numsub bar bar21) "bar"2) (integer) 13) "bar2"4) (integer) 0

客户端编程示例

 RedisPubSub client = new RedisPubSub("127.0.0.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值