Redis 發佈訂閱(pub/sub)是一種消息通訊模式:發送者(pub)發送消息,訂閱者(sub)接收消息。redis
pub即publish,推送。服務器
sub即subscribe,訂閱。微信
訂閱者訂閱某個channel(頻道),發佈者將消息發佈到Redis服務器,Redis服務器將消息推送給這個頻道的訂閱者。spa
channel 管道、通道、頻道。code
Redis的channel是公共頻道,誰均可以發佈消息。blog
就像微信羣、QQ羣,誰均可以發送消息,羣成員(訂閱者)都會收到消息。教程
Redis的消息是在線即時消息,相似於廣播,只有在線的訂閱者(鏈接到Redis服務器的訂閱者),纔會收到消息。class
若當時不在線,並不會收到消息。後面登錄了(鏈接到服務器),服務器也不會推送以前(這個客戶端未收到)的消息。服務器只推送一遍。cli
redis-cli -a password 書籍
subscribe channel1 channel2 ..... //可訂閱一個或多個頻道
會顯示訂閱的頻道的信息,一個頻道顯示3個條目:
(1)"subscribe" //固定的值,表示這是一個訂閱頻道
(2)訂閱的頻道名
(3)一個int型的數,表示這個頻道是當前客戶端訂閱的第幾個頻道
訂閱以後,當前命令提示符會阻塞,只能接收Redis服務器推送的消息,不能再執行命令。因此咱們再啓動一個客戶端推送消息。
publish channel message //channel指定要推送消息到哪一個頻道,message是要推送的消息
返回當前接收到消息的訂閱者的數量。1表示只有一個訂閱者收到了這條消息。
咱們看到另外一個客戶端已接收到消息。一條消息顯示3個項:
(1)「message」 //固定值,表示這是一條消息
(2)這條消息來自哪一個訂閱頻道
(3)消息內容
Redis的訂閱是臨時訂閱,只在本次鏈接期間有效。斷開鏈接後,會清除這個客戶端的訂閱信息,即取消全部訂閱的頻道。
誰均可以是發佈者,誰均可以發送消息。能夠向任何頻道發送消息。
一、subscribe channel1 channel2 ...... //訂閱一個或多個頻道
二、unsubscribe channel1 channel2 ....... //退訂一個或多個頻道。多了un
三、psubscribe pattern1 pattern2 ..... //多了一個p,即pattern,訂閱該模式匹配的全部頻道,能夠有多個匹配模式。
示例:
psubscribe tv //訂閱頻道tv
psubscribe *home //訂閱全部以home結尾的頻道
psubscribe china* //訂閱全部以china開頭的頻道
四、punsubscribe pattern1 pattern2 ..... //退訂符合匹配的全部頻道,可指定多個匹配模式,知足pattern1或者知足pattern2.....,,注意是或。
五、publish channel message //推送消息到某個頻道
紅色的命令是經常使用的。
不少書籍、教程中,關鍵字都使用全大寫,這樣作是爲了好區分關鍵字。其實關鍵字是大小寫等價的。