redis之(十)redis實現訊息中介軟體的功能

來源:互聯網
上載者:User

標籤:

[一]任務隊列的好處--->松耦合:生產者和消費者無需知道彼此實現的細節,只需要約定好任務的描述格式。這使得生產者和消費者可以由不同的團隊使用不同的程式設計語言編寫。--->易於擴充:消費者可以有多個,而且可以分布在不同的機器。可以輕易降低單台伺服器的負載。 [二]使用redis實現簡單的任務隊列(生產者消費者模型)--->根據清單類型的儲存結構實現隊列--->生產者命令:LPUSH key value[value ...] RPUSH key value[value...]--->消費者命令:RPOP key 或BRPOP key timeout ,  LPOP key 或者 BLPOP key timeout--->阻塞消費者命令:timeout 為0時,不設定逾時時間,一直等待,直到有訊息。如果設定數字,則單位為秒。 [三]使用redis實現優先順序隊列(生產者消費者模型)--->設定多個任務隊列,生產者按任務的優先順序,將任務發往不同的隊列--->消費者訂閱多個隊列,隊列的順序:按優先順序由高到低,從左側往右側排序。--->結果現象:消費者每次取訊息,都是從左側往右側取。先把優先順序高的隊列中任務消費完畢,才去消費優先順序低的隊列中的任務。執行個體:如 [四]使用redis實現發布訂閱模型(廣播模型)--->發行者往redis中的channel發布一條訊息x,所有訂閱該channel的訂閱者都可以得到這條訊息x--->發行者命令:PUBLISH channel message--->訂閱者命令:SUBSCRIBE channel [channel]--->PUBLISH命令發布訊息後,傳回值表示,訂閱到該訊息的訂閱者數量。如果返回0,表示無人訂閱,訊息不會持久化,會隨即消失。後面及時有訂閱者訂閱了該頻道,也無法訂閱到之前該發行者發布的曆史訊息。--->執行SUBSCRIBE命令後,用戶端會進入訂閱狀態。處於此狀態的用戶端不能使用除SUBSCRIBE,UNSUBSCRIBE,PSUBSCRIBE,PUNSUBSCRIBE這四個屬於“發布訂閱”模式的命令之外的命令。否則會報錯--->SUBSCRIBE命令執行後,會返回三個值。第一個值是訊息的類型。根據訊息類型的不同,第二個,第三個值也會不同(1)訊息類型包含=>subscibe,表示訂閱成功的反饋資訊。第二個值是訂閱成功的頻道名稱,第三個值是當前客訂閱的頻道數量。=>message,這個類型的回複是我們最關心的,它表示接收到訊息。第二個值標示產生訊息的頻道名稱,第三個值是訊息的內容=>unsubscribe.這個類型的回複表示成功取消訂閱某個頻道,第二個值對應的頻道名稱,第三個值是當前客訂閱的頻道數量。當此值返回0時,當前用戶端會退出訂閱狀態。之後可以執行其他非“發布訂閱”模式的命令。[五]發布訂閱模型:按照規則訂閱--->按規則訂閱通道的文法
符號 含義
? 匹配一個字元
* 匹配任意個(包括0個)字元
[] 匹配括弧間的任一字元,可以使用“-”符號表示一個範圍。如[a-z][1-9]
\x 匹配字元x,用於轉義符號。如果匹配“?”就需要使用\?
--->命令格式:PUSBSCRIBE  channelpattern[channelpattern...]--->傳回值四個值。  (1)pmessage:表示是通過PUSBSCRIBE命令訂閱頻道接收到的。  (2)channelpattern:表示是訂閱時使用的是那個萬用字元  (3)channelName:表示實際收到訊息的頻道命令  (4)messageContext:表示收到訊息的內容--->使用PUSBSCRIBE命令可以重複訂閱一個頻道。比如用戶端執行了。PUSBSCRIBE chanel.? channel.?*  那麼這個時候向channel.2發送訊息,則該訂閱用戶端將收到兩條訊息。同樣如果用戶端使用PUSBSCRIBE channel.10 channel.?* 訂閱訊息。則往channle1.10發送訊息,該訂閱用戶端也會收到兩條訊息。但訊息類型是兩種message合pmessage。  [六]發布訂閱模型:退訂規則--->通過匹配訂閱的退訂命令格式:PUNSUBSCRIBE [pattern [pattern ...]]--->直接訂閱的退訂的命令格式:UNSUBSCRIBE [channel [channel ...]]--->使用PUNSUBSCRIBE命令只能退訂通過PSUBSCRIBE命令訂閱規則。不會影響直接通過SUBSCRIBE命令訂閱的頻道--->同樣UNSUBSCRIBE命令也不會影響同過PSUBSCRIBE命令的訂閱的頻道。--->容易錯誤的點:PUNSUBSCRIBE命令退訂某個規則時,不會將匹配符號的命令規則展開。比如:用PUNSUBSCRIBE *是無法退訂channel.*。而是必須使用PUNSUBSCRIBE channel.*才能退訂channel.* 

redis之(十)redis實現訊息中介軟體的功能

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.