Redis訂閱發佈模型比較簡單,結構以下:redis
消息通道(channel)做爲消息中轉站,它不關心消息的發佈者(publisher)是誰,也不關心訂閱者(subscriber)有沒有成功的消費掉消息。publisher負責發送消息,subscriber負責接收消息。shell
Redis訂閱發佈核心的兩個命令就是: SUBSCRIBE 和 PUBLISH。服務器
顧名思義,SUBSCRIBE 就是訂閱消息,PUBLISH 就是發佈消息。ui
Tips:訂閱消息會阻塞鏈接,一旦開啓訂閱就不能執行其餘的命令(訂閱發佈命令除外)。code
SUBSCRIBE channel [channel...]
channel 表示消息通道。消息通道能夠是一個,也能夠是多個,多個消息通道之間用空格隔開。一個消息通道同時能夠被多個客戶端訂閱,消息通道對於客戶端來講是共享的,非獨享。圖片
打開終端,鏈接到Redis服務器:ip
weis-MacBook-Pro:~ weihan$ redis-cli 127.0.0.1:6379>
接着輸入以下命令,訂閱消息通道 chatroom :it
127.0.0.1:6379> subscribe chatroom Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "chatroom" 3) (integer) 1
出現上面顯示就表示已成功訂閱消息通道 chatroom 的消息,數字1表示鏈接成功。此時能夠看到當前鏈接處在阻塞狀態,能夠按 Ctrl + C
鍵退出訂閱狀態。class
PUBLISH channel message
channel 表示消息通道監控
message 表示待發布的消息內容
從新打開一個終端,鏈接到Redis服務器,並輸入下面命令:
127.0.0.1:6379> publish chatroom "Hi" (integer) 1
上面的命令表示向消息通道 chatroom 中發佈一條 Hi 的文本消息。數字1表示成功收到消息的訂閱者數量。
接着切換到剛剛訂閱消息的終端,能夠看到下面消息:
127.0.0.1:6379> subscribe chatroom Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "chatroom" 3) (integer) 1 1) "message" 2) "chatroom" 3) "Hi"
此時咱們已經收到了剛剛發佈的消息,消息內容爲 Hi。
怎麼樣,是否是很簡單?
除了 SUBSCRIBE 和 PUBLISH兩個命令外,Redis還爲咱們提供了一些列的監控命令:
PUBSUB CHANNELS [pattern]
pattern 表示匹配規則,此參數爲選填,若不指定匹配規則,則默認查詢全部激活狀態的消息通道。
激活狀態的消息通道:至少存在一個訂閱者的消息通道纔算是激活狀態的消息通道
在發佈消息的終端,輸入以下命令:
127.0.0.1:6379> pubsub channels 1) "chatroom"
能夠看到已經查詢出咱們剛剛建立的消息通道 chatroom。
PUBSUB NUMSUB [channel...]
channel:消息通道名稱,
在發佈消息的終端,輸入以下命令:
127.0.0.1:6379> pubsub numsub chatroom 1) "chatroom" 2) (integer) 1
數字1表示消息通道 chatroom 的訂閱者數量爲1個