1. 程式人生 > >Redis 發布與訂閱

Redis 發布與訂閱

需要 clas 相關 輸入 叢書 col 發布 參數 nbsp

參考:黃健宏 著. Redis設計與實現 (數據庫技術叢書) . 機械工業出版社. Kindle 版本.

Redis的發布與訂閱功能由 PUBLISH、 SUBSCRIBE、 PSUBSCRIBE 等命令組成。 通過執行 SUBSCRIBE 命令, 客戶端可以訂閱一個或多個頻道, 從而成為這些頻道的訂閱者( subscriber)

除了訂閱頻道之外, 客戶端還可以通過執行 PSUBSCRIBE 命令訂閱一個或多個模式, 從而成為這些模式的訂閱者.


一、頻道的訂閱與退訂

Redis 將所有頻道的訂閱關系都保存在服務器狀態的 pubsub_ channels 字典裏面, 這個字典的鍵是某個被訂閱的頻道, 而鍵的值則是一個鏈表, 鏈表裏面記錄了所有訂閱這個頻道的客戶端:

技術分享

訂閱頻道: SUBSCRIBE "example.sport"

退訂頻道: UNSUBSCRIBE "example.sport"


二、模式的訂閱與退訂

與頻道的訂閱類似, 服務器將所有模式的訂閱關系都保存在服務器狀態的 pubsub_ patterns 屬性裏面:

技術分享

模式訂閱: PSUBSCRIBE “example.*”

模式退訂: PUNSUBSCRIBE "example.*"


三、發送消息

當一個 Redis 客戶端執行 PUBLISH< channel>< message> 命令將消息 message 發送給頻道 channel 的時候, 服務器需要執行以下兩個動作:

1) 將消息 message 發送給 channel 頻道的所有訂閱者。

2) 如果有一個或多個模式 pattern 與頻道 channel 相匹配, 那麽將消息 message 發送給 pattern 模式的訂閱者。

技術分享

PUBLISH 命令通過訪問 pubsub_ channels 字典來向頻道的所有訂閱者發送消息, 通過訪問 pubsub_ patterns 鏈表來向所有匹配頻道的模式的訂閱者發送消息。


四、查看訂閱信息

PUBSUB 命令是 Redis 2. 8 新增加的命令之一, 客戶端可以通過這個命令來查看頻道或者模式的相關信息, 比如某個頻道目前有多少訂閱者, 又或者某個模式目前有多少訂閱者, 諸如此類。

PUBSUB subcommand [argument [argument ...]]

1. PUBSUB CHANNELS [pattern]

當沒有 pattern 參數時,返回當前服務器被訂閱的所有頻道。

如果給定 pattern 參數,返回服務器當前被訂閱的頻道中那些與 pattern 模式相匹配的頻道。ex: PUBSUB CHANNELS "news.*" | PUBSUB CHANNELS "news.[ie]t"

2. PUBSUB NUMSUB[ channel- 1 channel- 2... channel- n]

該子命令接受任意多個頻道作為輸入參數, 並返回這些頻道的訂閱者數量。

3. PUBSUB NUMPAT

該子命令用於返回服務器當前被訂閱模式的數量。

PUBSUB 命令的三個子命令都是通過讀取 pubsub_ channels 字典和 pubsub_ patterns 鏈表中的信息來實現的。


Redis 發布與訂閱