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