Redis 發佈訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。 pub即publish,推送。 sub即subscribe,訂閱。 訂閱者訂閱某個channel(頻道),發佈者將消息發佈到Redis伺服器,Redis伺服器將消息推送給這個頻道的訂閱者。 ...
Redis 發佈訂閱(pub/sub)是一種消息通信模式:發送者(pub)發送消息,訂閱者(sub)接收消息。
pub即publish,推送。
sub即subscribe,訂閱。
訂閱者訂閱某個channel(頻道),發佈者將消息發佈到Redis伺服器,Redis伺服器將消息推送給這個頻道的訂閱者。
channel 管道、通道、頻道。
Redis的channel是公共頻道,誰都可以發佈消息。
就像微信群、QQ群,誰都可以發送消息,群成員(訂閱者)都會收到消息。
Redis的消息是線上即時消息,類似於廣播,只有線上的訂閱者(連接到Redis伺服器的訂閱者),才會收到消息。
若當時不線上,並不會收到消息。後面登陸了(連接到伺服器),伺服器也不會推送之前(這個客戶端未收到)的消息。伺服器只推送一遍。
使用示例
1、啟動一個客戶端,連接到伺服器
redis-cli -a password
2、訂閱頻道
subscribe channel1 channel2 ..... //可訂閱一個或多個頻道
會顯示訂閱的頻道的信息,一個頻道顯示3個條目:
(1)"subscribe" //固定的值,表示這是一個訂閱頻道
(2)訂閱的頻道名
(3)一個int型的數,表示這個頻道是當前客戶端訂閱的第幾個頻道
訂閱之後,當前命令提示符會阻塞,只能接收Redis伺服器推送的消息,不能再執行命令。所以我們再啟動一個客戶端推送消息。
3、在另一個Redis客戶端推送消息
publish channel message //channel指定要推送消息到哪個頻道,message是要推送的消息
返回當前接收到消息的訂閱者的數量。1表示只有一個訂閱者收到了這條消息。
我們看到另一個客戶端已接收到消息。一條消息顯示3個項:
(1)“message” //固定值,表示這是一條消息
(2)這條消息來自哪個訂閱頻道
(3)消息內容
Redis的訂閱是臨時訂閱,只在本次連接期間有效。斷開連接後,會清除這個客戶端的訂閱信息,即取消所有訂閱的頻道。
誰都可以是發佈者,誰都可以發送消息。可以向任何頻道發送消息。
相關命令
1、subscribe channel1 channel2 ...... //訂閱一個或多個頻道
2、unsubscribe channel1 channel2 ....... //退訂一個或多個頻道。多了un
3、psubscribe pattern1 pattern2 ..... //多了一個p,即pattern,訂閱該模式匹配的所有頻道,可以有多個匹配模式。
示例:
psubscribe tv //訂閱頻道tv
psubscribe *home //訂閱所有以home結尾的頻道
psubscribe china* //訂閱所有以china開頭的頻道
4、punsubscribe pattern1 pattern2 ..... //退訂符合匹配的所有頻道,可指定多個匹配模式,滿足pattern1或者滿足pattern2.....,,註意是或。
5、publish channel message //推送消息到某個頻道
紅色的命令是常用的。
很多書籍、教程中,關鍵字都使用全大寫,這樣做是為了好區分關鍵字。其實關鍵字是大小寫等價的。