Redis釋出訂閱實現原理
阿新 • • 發佈:2018-12-30
釋出訂閱中使用到的命令就只有三個:PUBLISH,SUBSCRIBE,PSUBSCRIBE
- PUBLISH 用於釋出訊息
- SUBSCRIBE 也叫頻道訂閱,用於訂閱某一特定的頻道
- PSUBSCRIBE 也叫模式訂閱,用於訂閱某一組頻道,使用glob的方式,比如xxx-*可以匹配xxx-a,和xxx-b,xxx-ddd等等
訂閱頻道: pubsub_channels
關聯操作:
- 如果已經存在訂閱者,則新增到連結串列的尾部
- 如果沒有訂閱者,那麼建立頻道,然後新增訂閱者
刪除操作:
- 找到對應的連結串列,進行刪除
- 如果刪除後,連結串列為空,則刪除頻道
模式訂閱: pubsub_patterns
client-7訂閱music.*
client-8訂閱book.*
client-9訂閱news.*
訂閱模式:
- 新建一個pubsubPattern結構
- 新增到連結串列的尾部
退訂模式:
- 查詢相應的pubsubPattern然後刪除
傳送訊息:
- 將訊息傳送給channel頻道的所有訂閱者
- 遍歷整個pubsub_patterns表,查詢匹配的模式,如果有一個或者多個模式與頻道匹配,將訊息傳送給pattern模式的訂閱者
相關命令:
- 檢視所有的頻道:PUBSUB CHANNELS
- 查詢訂閱者的數量:PUBSUB NUMSUB
- 查詢伺服器被訂閱者的數量:PUBSUB NUMPAT