Redis 發佈訂閱(pub/sub)是一種消息通訊模式:發送者(pub)發送消息,訂閱者(sub)接收消息。主要的目的是解耦消息發佈者和消息訂閱者之間的耦合,這點和設計模式中的觀察者模式比較類似。pub /sub不單單解決發佈者和訂閱者直接代碼級別耦合也解決二者在物理部署上的耦合。
redis做爲一個pub/sub server,在訂閱者和發佈者之間起到了消息路由的功能。訂閱者能夠經過subscribe和psubscribe命令向redis server訂閱本身感興趣的消息類型,redis將消息類型稱爲通道(channel)。當發佈者經過publish命令向redis server發送特定類型的消息時。訂閱該消息類型的所有client都會收到此消息。這裏消息的傳遞是多對多的。一個client能夠訂閱多個channel,也能夠向多個channel發送消息。redis
下圖展現了頻道 channel1 , 以及訂閱這個頻道的三個客戶端 —— client2 、 client5 和 client1 之間的關係:設計模式
當有新消息經過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被髮送給訂閱它的三個客戶端:ui
最明顯的用法就是構建實時消息系統,好比普通的即時聊天,羣聊等功能。這時每一個人都是訂閱者與發佈者。spa
SUBSCRIBE channel [channel2 ...]
訂閱給定的一個或多個頻道的信息。設計
PSUBSCRIBE pattern [pattern ...]
訂閱一個或多個符合給定模式的頻道。每一個模式以 * 做爲匹配符,好比 it* 匹配全部以 it 開頭的頻道( it.news 、 it.blog 、 it.tweets 等等)。 news.* 匹配全部以 news. 開頭的頻道( news.it 、 news.global.today 等等),諸如此類。code
pubsub channels [pattern]
列出活躍頻道(正在被subscribe監聽的頻道,注意不包括psubscribe監聽的)server
pubsub numsub [channel-1 ... channel-n]
返回給定頻道的訂閱者數量,訂閱模式的客戶端不計算在內blog
PUBSUB NUMPAT
返回訂閱模式的數量。路由
UNSUBSCRIBE [channel [channel ...]]
指退訂給定的頻道。rem
PUNSUBSCRIBE [pattern [pattern ...]]
退訂全部給定模式的頻道。
PUBLISH channel message
將信息發送到指定的頻道。
開兩個redis-cli 一個做爲發佈者,一個做爲訂閱者;
# 訂閱者 127.0.0.1:6379> subscribe news #訂閱news頻道,這個時候就是一個監聽狀態了,只要發佈者一發布消息,訂閱者就會收到 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "news" 3) (integer) 1 # 發佈者 redis 127.0.0.1:6379> publish news 'good good study' (integer) 1 #這裏反饋的是有多少個subscribe客戶端接收到這條news; redis 127.0.0.1:6379> publish news 'day day up' (integer) 1