redis中的發布訂閱 Pub Sub

2022-01-31 12:39:55 字數 2377 閱讀 6114

這裡使用nodejs的redis模組說明,具體可見 ,先來通過乙個簡單的例子了解下redis中的pub/sub具體怎麼實現吧。。

var express = require('express');

var router =express.router();

var redis = require("redis"); /*

get home page.

*/router.get('/', function

(req, res, next) );

client2.on("error",function

(err));

client1.on("subscribe", function (channel, count) );

client1.on("message", function (channel, message)

});client1.subscribe("a nice channel"); //

自動觸發"sunscribe"事件

res.render('index', );

}); module.exports = router;

將上述**儲存為index.js檔案,替換express專案中的index.js,然後啟動後瀏覽器中輸入:localhost:3000,觀察webstorm中列印資訊如下:

client1 sub count:1client1 sub channel:a nice channel

client1 channel name: a nice channel->message: i am sending a message.

client1 channel name: a nice channel->message: i am sending a second message.

client1 channel name: a nice channel->message: i am sending my last message.

這裡來說明下:

發布訂閱

redis中的發布訂閱,自我的理解是:發布訂閱就是有一端發布訊息,一端訂閱訊息即接收訊息,這裡的發布訂閱端都可以稱為client端,也就是說乙個client既可以發布多個訊息,亦可以訂閱多個訊息。

說 到訊息,到底什麼是訊息?redis中的每條訊息是一條帶有三個元素的多條批量回覆(multi-bulk-reply)。這貨剛聽時候著實難以理解,下 面繼續。這裡的第乙個元素是訊息型別,redis中訊息型別並非我們理解的string、object等,而是subscribe、 unsubscribe、message等型別。

如果客戶端執行以下命令:

redis> subscribe first second

表明該客戶端訂閱了名稱為first和second的兩個channel,那麼它將收到以下回覆:

1) "subscribe"

2) "first"

3) (integer) 1

1) "subscribe"

2) "second"

3) (integer) 2

其中,subscribe表明此訊息型別,first為channel名稱,(integer) 1表示當前客戶端訂閱的channel總數為1,如果此時另乙個客戶端執行了如下命令:

redis> publish second hello

表示該客戶端發布了乙個channel為second,內容為hello的一條資訊,那麼之前訂閱了channel為second的客戶端將收到以下資訊:

1) "message"

2) "second"

3) "hello"

其中,message表明該訊息為另一客戶端傳送而來,second為channel名,此時hello為資訊內容。如果這時訂閱的客戶端再執行以下命令:

redis> unsubscribe

表明訂閱者退訂所有之前訂閱的channel,這時命令執行後收到回覆如下:

1) "unsubscribe"

2) "second"

3) (integer) 1

1) "unsubscribe"

2) "first"

3) (integer) 0

可以看到訊息退訂時是一條條挨個退訂,而且是「後訂先退」順序,當然也可以直接指定退訂的channel。

有一點覺得比較重要:

通過publish發出去的資訊,是不會儲存在服務端的,服務端只是做中轉處理。也就是說,如果客戶端publish了資訊至channel,而沒有其它客戶端訂閱該channel,那麼該訊息也是無效的,訊息的傳遞是以channel為載體的。

Redis 發布訂閱

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關係 當有新訊息通過 pu...

Redis 發布訂閱

redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 publish 傳送訊息,訂閱者 subscribe 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖是 頻道 channel1 以及訂閱這個頻道的三個客戶端 client1 client2和 client3 當有新訊息通過 ...

Redis發布訂閱

概述 redis發布訂閱 pub sub 是種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 訂閱訊息。redis客戶端可以訂閱任意數量的頻道。下圖展示了頻道channel以及訂閱它的三個客戶端 client2 client5和client1之間的關係 當有新的訊息publish到chann...