1.1.Redis發佈訂閱簡介
Redis發佈訂閱(public/subscribe)是一種消息通信模式:發佈者(pub)發送消息,訂閱者(sub)接收消息。
Redis客戶端可以訂閱任意數量的頻道。
下圖展示了頻道channel1,以及訂閱這個頻道的三個客戶端——client2、clinet5和clinet1之間的關係:
當有新消息通過 PUBLISH 命令發送給頻道 channel1 時, 這個消息就會被髮送給訂閱它的三個客戶端:
1.2.Redis發佈訂閱常用命令
-
subscribe chanel[,chanel2]
表示訂閱對應的頻道信息,對應這個客戶端就是訂閱者(消費者):
127.0.0.1:6379> SUBSCRIBE kuangshenshuo Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "kuangshenshuo" 3) (integer) 1
-
public message
127.0.0.1:6379> PUBLISH kuangshenshuo hello,kuangshen (integer) 1 127.0.0.1:6379> PUBLISH kuangshenshuo hello,maria (integer) 1 127.0.0.1:6379> PUBLISH kuangshenshuo "hello,redis" (integer) 1
可以看到對應頻道下的消息接收方已經收到了發佈方發來的消息:
原理
Redis通過publish、subscribe、psubscribe等命令實現發佈和訂閱功能。
通過subscribe命令訂閱某頻道後,redis-server裏維護了一個字典,字典的鍵就是一個個channel,而字典的值則是一個鏈表,鏈表中保存了所有訂閱這個channel的客戶端。subscribe命令的關鍵,就是將客戶端添加到給定channel的訂閱鏈表中。
通過publish命令向訂閱者發送消息,redis-server會使用給定的頻道作爲鍵,在它所維護的channel字典中查找記錄了訂閱這個頻道的所有客戶端的鏈表,遍歷這個鏈表,將消息發佈給所有訂閱者。
Pub/Sub從字面上理解就是發佈(Publish)與訂閱(Subscribe),在Redis中,你可以設定對某一key值進行消息發佈及消息訂閱,當一個key值上進行了消息發佈後,所有訂閱它的客戶端都會收到相應的消息。這一功能最明顯的用法就是用作實時消息系統,比如普通的即時聊天、羣聊等功能。
使用場景:
-
實時消息系統
-
實時聊天(頻道當做聊天室,將信息回顯給所有人即可)
-
訂閱,關注系統
博文寫作參考: