【數據庫】Redis(5)--Redis發佈訂閱

Redis發佈訂閱

Redis發佈訂閱模型就是Redis提供的一種簡單的消息訂閱消息消費的模式,可以實現簡單的MQ模擬通信的功能。即Redis是可以用作消息訂閱和發佈實現的一種中間件,不僅僅是緩存,不僅僅是非關係型數據庫。

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

表示發佈對應消息信息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發佈訂閱命令

1.3.Redis發佈與訂閱原理

原理

Redis通過publishsubscribepsubscribe等命令實現發佈和訂閱功能。

通過subscribe命令訂閱某頻道後,redis-server裏維護了一個字典字典的鍵就是一個個channel而字典的值則是一個鏈表鏈表中保存了所有訂閱這個channel的客戶端。subscribe命令的關鍵,就是將客戶端添加到給定channel的訂閱鏈表中

通過publish命令向訂閱者發送消息,redis-server會使用給定的頻道作爲鍵,在它所維護的channel字典中查找記錄了訂閱這個頻道的所有客戶端的鏈表,遍歷這個鏈表,將消息發佈給所有訂閱者。

Pub/Sub從字面上理解就是發佈(Publish)與訂閱(Subscribe),在Redis中,你可以設定對某一key值進行消息發佈及消息訂閱,當一個key值上進行了消息發佈後,所有訂閱它的客戶端都會收到相應的消息。這一功能最明顯的用法就是用作實時消息系統,比如普通的即時聊天、羣聊等功能。

使用場景

  • 實時消息系統

  • 實時聊天(頻道當做聊天室,將信息回顯給所有人即可)

  • 訂閱,關注系統

 

博文寫作參考:

菜鳥教程--Redis發佈訂閱

狂神說Redis

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章