辛星淺析Redis中的pub/sub功能,辛星redis
pub/sub功能也就是publish/subscribe功能,也就是發布訂閱功能。基於事件的系統中,pub/sub是目前廣泛使用的通訊模型,它採用事件作為基本的通訊機制,提供大規模系統所要求的鬆散耦合的互動模式:訂閱者比如用戶端以事件訂閱的方式表達出它有興趣接收的一個事件或一類事件,發行者比如伺服器可以將訂閱者興趣的事件隨時通知相關訂閱者。
pub/sub功能可以有三個非耦合:
(1)時間非耦合,也就是發行者和訂閱者不必同時線上,它們不必同時參與互動。
(2)空間非耦合,也就是發行者和訂閱者不必相互知道對方所在的位置。發行者通過事件服務發布時間,訂閱者通過事件服務間接獲得事件。發行者和訂閱者不需要擁有直接到對方的引用,也不必知道有多少個訂閱者或者是發行者參與互動。
(3)同步非耦合,發布/訂閱是非同步模式。發行者可以不斷的產生事件,而訂閱者(通過一個回調)則可以非同步地得到產生事件的通知。
pub/sub功能按照訂閱者式分為基於主題(topic-based)、基於內容(content-based)、基於類型(type-based)的方式。它是可適用於可擴充性高、鬆散耦合系統的分布式互動模型。在抽象層中,它的時間非耦合、空間非耦合和空間非耦合性可允許參與者不依賴於另一個而獨立操作,具有一定的可擴充性。但是在實現的時候,可擴充性依然受到其他原因的牽制。
pub/sub通常適用的範圍:
(1)靈活的訂閱要求複雜的過濾和路由演算法
(2)高可用性開銷(事件偵聽、日誌重傳)
(3)訊息認可帶來的網路流量消耗
(4)龐大的訂閱者資料帶來的系統開銷
基於事件的pub/sub中介軟體的開發與利用在一定程度上可以提高系統的效率。
Redis中的實現流程:
(1)訂閱者訂閱兩個topic,範例:
subscribe first second
(2)發行者發布資訊,範例:
publish first hello
publish second world
(3)訂閱者取消一個topic,返利:
unsubscribe first