redis(二)-發佈訂閱

參考資料:
redis 4.x cookbook 中文版;
redis官方文檔
注: 本文redis的版本爲: 5.0.3

redis學習路徑

發佈訂閱:

注意,如果先發布消息,然而頻道沒有訂閱者,這時的消息會被丟失;

redis的發佈訂閱是一個消息推送的機制;
發佈者(publisher)向指定頻道(channel)發佈消息(message);
頻道(channel)向訂閱者(subscriber)推送(deliver)消息;
有很多專門做消息推送的中間件,比redis的發佈訂閱要好很多;但是當你的系統需要快速實現簡單的消息推送功能的話,redis的發佈訂閱還是能滿足需求的;

最基礎的操作:訂閱一個頻道和向頻道發送消息;

#訂閱
127.0.0.1:6379> subscribe testpubsub_1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "testpubsub_1"
3) (integer) 1
1) "message"
2) "testpubsub_1"
3) "this is new message"
#發佈
127.0.0.1:6379> publish testpubsub_1 "this is new message"
(integer) 1

PSUBSCRIBE 正則表達式1 正則表達式2 … 批量訂閱匹配上正則表達式的所有頻道;
值得注意的是,如果訂閱時正則表達式沒有匹配到頻道,在後續如果發佈到某個新頻道時匹配上了正則,也會推送消息;

#訂閱
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
1) "pmessage"
2) "a*"
3) "abc*"
4) "1"
1) "pmessage"
2) "a*"
3) "ab"
4) "1"
#發佈
127.0.0.1:6379> publish abc* "1"
(integer) 1
127.0.0.1:6379> publish ab "1"
(integer) 1

UNSUBSCRIBE [channel [channel …]]
取消訂閱頻道;支持批量(需提供準確頻道名稱);

PUNSUBSCRIBE [pattern [pattern …]]
通過正則匹配,批量取消訂閱;

PUBSUB CHANNELS [pattern]
獲取正在活躍的頻道(至少有一個客戶端在訂閱);如果有將會返回頻道名稱;
注意!!!使用psubscribe命令訂閱不會被統計到;

PUBSUB NUMSUB [channel-1 … channel-N]
統計指定頻道的訂閱者數量;

127.0.0.1:6379> pubsub numsub ab abc*
1) "ab"
2) (integer) 1
3) "abc*"
4) (integer) 0

PUBSUB NUMPAT

#訂閱1
127.0.0.1:6379> psubscribe ab
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "ab"
3) (integer) 1
#訂閱2
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
#獲取當前發佈訂閱系統中,有幾種訂閱方式;
#通俗一點:統計所有psubscribe命令中的正則表達式總數;
#注意這裏統計不是根據正則表達式字符串來做去重統計,而是不去重的全統計;
127.0.0.1:6379> pubsub numpat
(integer) 2
#再新開一個訂閱
127.0.0.1:6379> psubscribe a*
Reading messages... (press Ctrl-C to quit)
1) "psubscribe"
2) "a*"
3) (integer) 1
#再統計一次
127.0.0.1:6379> pubsub numpat
(integer) 3

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章