使用Redis的發布訂閱功能
redis另一個常見的用途是發布訂閱功能 。 它非常的簡單 ,當連接失敗時 ConnectionMultiplexer 會自動重新進行訂閱 。
ISubscriber sub = redis.GetSubscriber();
GetSubscriber 方法返回一個 ISubscriber 類型的實例 。發布訂閱功能沒有數據庫的概念,我們可以為其提供一個 async-state 。所有的訂閱都是全局的:
ISubscriber 實例不是他們的生命周期 , 發布訂閱的特性在redis中被定義為 “channels” , 渠道不需要預先定義在數據庫中 。 訂閱操作需要一個渠道
名稱和一個回調函數來處理發布的消息。
sub.Subscribe("messages", (channel, message) => {
Console.WriteLine((string)message);
});
你可以發布一個消息到指定的渠道中:
sub.Publish("messages", "hello");
他將會將 “hello” 這個消息發布到所有訂閱了messages渠道的客戶端(幾乎是實時的)。 和之前一樣渠道的名稱和消息也可以是二進制的。
指定消息發布的順序(Message Order)
當使用 pub/sub API 時,你可以指定消息是並行還是有序的。
有序的意味着你不需要考慮線程安全的問題 ,同時也意味着消息會通過隊列完全按照你發布的順序來進行傳遞,這必然導致消息的延遲。
並行處理,不能保證消息是按照發布的順序來進行處理的,你的代碼也要保證當存在並發時程序運行正常,
消息的順序通常是無關緊要的, 並行處理可以獲得更好的性能和擴展性。
為確保安全,消息的傳遞默認是有序的。為獲得更好的性能強烈建議你使用並行操作 。 這是非常簡單的。
multiplexer.PreserveAsyncOrder = false;
建議並非是你配置該選項的理由, 是否適合完全取決與你訂閱消息的代碼。