新聞中心
這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
RedisPubSub發(fā)布訂閱(詳細(xì)圖解)
Redis PubSub 模塊又稱發(fā)布訂閱者模式,是一種消息傳遞系統(tǒng),實(shí)現(xiàn)了消息多播功能。發(fā)布者(即發(fā)送方)發(fā)送消息,訂閱者(即接收方)接收消息,而用來傳遞消息的鏈路則被稱為
channel。在 Redis 中,一個(gè)客戶端可以訂閱任意數(shù)量的 channel(可譯為頻道)。
圖1:發(fā)布訂閱模式
channel。在 Redis 中,一個(gè)客戶端可以訂閱任意數(shù)量的 channel(可譯為頻道)。

消息多播:生產(chǎn)者生產(chǎn)一次消息,中間件負(fù)責(zé)將消息復(fù)制到多個(gè)消息隊(duì)列中,每個(gè)消息隊(duì)列由相應(yīng)的消費(fèi)組進(jìn)行消費(fèi),這是分布式系統(tǒng)常用的一種解耦方式。
發(fā)布/訂閱流程
下面的示例演示了“發(fā)布/訂閱者”模式的工作流程,示意圖如下所示:
圖1:發(fā)布訂閱模式
1) 訂閱者/等待接收消息
首先打開 Redis 客戶端,然后訂閱了一個(gè)名為“www.biancheng.net”的 channel,使用如下命令:
#訂閱channel 127.0.0.1:6379> SUBSCRIBE www.biancheng.net Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "www.biancheng.net" 3) (integer) 1
上述示例使用
SUBSCRIBE命令訂閱了名為 www.biancheng.net 的 channel。命令執(zhí)行后該客戶端會(huì)出處于等待接收消息的阻塞狀態(tài)。
2) 發(fā)布者/發(fā)送消息
下面再啟動(dòng)一個(gè) Redis 客戶端,輸入如下命令:
127.0.0.1:6379> PUBLISH www.biancheng.net "this is website" (integer) 1 127.0.0.1:6379> PUBLISH www.biancheng.net "hello world" (integer) 1 127.0.0.1:6379> PUBLISH www.biancheng.net "how are you" (integer) 1
通過上述PUBLISH命令發(fā)布了三條信息。現(xiàn)在兩個(gè)客戶端在處于同一個(gè)名為“www.biancheng.net”的頻道上,前者負(fù)責(zé)接收消息,后者負(fù)責(zé)發(fā)布消息。
3) 訂閱者/成功接收消息
完成了上述操作后,您會(huì)在接收消息的客戶端得到如下輸出結(jié)果:
127.0.0.1:6379> SUBSCRIBE www.biancheng.net Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "www.biancheng.net" 3) (integer) 1 1) "message" 2) "www.biancheng.net" 3) "this is website" 1) "message" 2) "www.biancheng.net" 3) "hello world" 1) "message" 2) "www.biancheng.net" 3) "how are you"
常用命令匯總
| 命令 | 說明 |
|---|---|
| PSUBSCRIBE pattern [pattern ...] | 訂閱一個(gè)或多個(gè)符合指定模式的頻道。 |
| PUBSUB subcommand [argument [argument ...]] | 查看發(fā)布/訂閱系統(tǒng)狀態(tài),可選參數(shù) 1) channel 返回在線狀態(tài)的頻道。 2) numpat 返回指定模式的訂閱者數(shù)量。 3) numsub 返回指定頻道的訂閱者數(shù)量。 |
| PUBSUB subcommand [argument [argument ...]] | 將信息發(fā)送到指定的頻道。 |
| PUNSUBSCRIBE [pattern [pattern ...]] | 退訂所有指定模式的頻道。 |
| SUBSCRIBE channel [channel ...] | 訂閱一個(gè)或者多個(gè)頻道的消息。 |
| UNSUBSCRIBE [channel [channel ...]] | 退訂指定的頻道。 |
基本命令應(yīng)用
下面對(duì)上述常用命令做演示:
#訂閱指定模式的頻道,*代表通配符,會(huì)匹配所有www開頭的頻道 127.0.0.1:6379> PSUBSCRIBE www* Reading messages... (press Ctrl-C to quit) 1) "psubscribe" 2) "www*" 3) (integer) 1 #按ctrl+c退出阻塞狀態(tài) ^C C:\Users\Administrator>redis-cli #查看發(fā)布訂閱系統(tǒng)狀態(tài),返回相應(yīng)的頻道 127.0.0.1:6379> PUBSUB channels 1) "www.biancheng.net" #退訂指定模式的頻道 127.0.0.1:6379> PUNSUBSCRIBE www* 1) "punsubscribe" 2) "www*" 3) (integer) 0 #退訂指定頻道 127.0.0.1:6379> UNSUBSCRIBE www.biancheng.net 1) "unsubscribe" 2) "www.biancheng.net" 3) (integer) 0
網(wǎng)頁名稱:RedisPubSub發(fā)布訂閱(詳細(xì)圖解)
網(wǎng)址分享:http://fisionsoft.com.cn/article/dpgsdsp.html


咨詢
建站咨詢
