redis實現發布/訂閱

來源:互聯網
上載者:User

發布/訂閱模式的原型是這樣的:有兩類主體,生產者和消費者,生產者會將需要處理的任務放到任務隊列中,而消費者則不斷地從任務隊列中讀取任務並執行。生產者和消費者只需要提前定義好任務隊列的格式,雙方並不需要瞭解對方的實現細節。由於雙方是基於任務隊列進行互動的,所以,新增生產者或新增消費者都比較容易。總的來說,發布/訂閱模式具有松耦合、易於擴充的特性。 通過PUBLISH和SUBSCRIBE命令實現發布/訂閱

redis對發布/訂閱模式提供了非常好的支援,提供了PUBLISH和SUBSCRIBE兩個命令,可以輕鬆地實現多個用戶端之間的發布和訂閱。首先開啟一個redis-cli用戶端,這個用戶端作為消費者,來訂閱一個頻道的訊息

redis 127.0.0.1:6379> SUBSCRIBE channel1Reading messages... (press Ctrl-C to quit)1) "subscribe"2) "channel1"3) (integer) 1

我們訂閱了channel1頻道,然後消費者程式阻塞,進入監聽模式。
然後我們在開啟一個redis-cli用戶端,作為生產者,發布訊息

redis 127.0.0.1:6379> PUBLISH channel1 hello(integer) 1

我們向channel1發布了一個訊息“hello”,傳回值為1,表示一個消費者收到了訊息。此時,我們的消費者用戶端監聽到了訊息並輸出了一下內容

1) "message"2) "channel1"3) "hello"
按照規則訂閱

除了SUBSCRIBE命令外,redis還提供了PSUBSCRIBE命令,該命令支援通過blob風格的萬用字元格式來訂閱頻道。我們開啟一個新的redis-cli用戶端,通過PSUBSCRIBE命令監聽channel*隊列

redis 127.0.0.1:6379> PSUBSCRIBE channel*Reading messages... (press Ctrl-C to quit)1) "psubscribe"2) "channel*"

然後開啟生產者用戶端,分別向channel1和channel2頻道發布訊息

redis 127.0.0.1:6379> PUBLISH channel1 hello(integer) 1redis 127.0.0.1:6379> PUBLISH channel2 hello(integer) 1

這時,我們的消費者用戶端監聽到了兩條訊息,然後輸出

1) "pmessage"2) "channel*"3) "channel1"4) "hello"1) "pmessage"2) "channel*"3) "channel2"4) "hello"

從消費者的輸出中可以看出來,redis分別返回了PSUBSCRIBE監聽的頻道、收到訊息的具體頻道以及訊息內容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.