Redis發布/訂閱

Pub/Sub 是一種從任意數量的資料_發布者_收集資料並允許 1 個或多個_訂閱者_即時使用提要的方法,而無需直接連接到發布者。 這種模式允許系統更輕鬆地擴展,並允許隨時新增或刪除發布者和訂閱者。

Redis允許創建發布者和訂閱者介面的 Pub/Sub_通道_。 通道上的消息_最多向每個訂閱者發送一次,_這使得它們非常適合觸發不能重複的操作,但要注意,因為一旦傳遞,通道訊息就不會持久。

用例:

  • 即時訊息。
  • 短暫的多用戶聊天。
  • 日誌流。

訂閱頻道

_訂閱者_只需發出「訂閱 " 開始訂閱頻道的命令:

> SUBSCRIBE mychannel

如果訂閱者需要訂閱多個頻道,那麼這也是可能的:

> SUBSCRIBE mychannel1 mychannel2 mychannel3

訂閱頻道意味著訂閱者_在訂閱後將_收到發佈到該頻道的任何訊息。 較舊的訊息不會持久保存,因此訂閱者必須連接並訂閱才能在訊息發生時獲取訊息。

如果該通道不存在,那麼訂閱者將不會看到任何錯誤,也不會看到任何訊息。

發佈到頻道

發布者可以使用 PUBLISH <channel> <message> 指令發佈到頻道:

> PUBLISH mychannel "my first message"

任何訂閱者都會收到以下訊息:

1) "message"
2) "mychannel"
3) "my first message"

訂閱訊息包括頻道名稱和訊息本身。

常見的模式是將 JSON 物件作為訊息文字發送:

> PUBLISH mychannel '{"id":"1234","name":"db14","msg":"Out of Memory"}'

PUBLISH 的回傳值是一個整數,告訴呼叫者有多少訂閱者收到了訊息。

選擇性訂閱

可以訂閱通配符頻道,而不是訂閱整個頻道。 透過謹慎命名通道,這有助於查看應用程式的所有日誌、僅其生產日誌或僅其生產資料庫的日誌。

> PSUBSCRIBE *
> PSUBSCRIBE prod_*
> PSUBSCRIBE prod_database_*
> PSUBSCRIBE prod_database_db57_activity_*

取消訂閱

訂閱者可以透過以下方式取消訂閱所有已訂閱的頻道:

> UNSUBSCRIBE

進一步閱讀