1. 程式人生 > >Redis學習筆記(十)進階之訊息通知

Redis學習筆記(十)進階之訊息通知

任務佇列

使用LPUSHRPOP命令操作列表來實現佇列

BLPOP key [key ...] timeout(s)

BRPOP key [key ...] timeout(s)

BLPOP/BRPOP是阻塞式,同時檢測多個鍵,如果所有鍵都沒有元素則阻塞,如果其中有一個鍵有元素則會從該鍵中彈出元素,返回值為鍵名和對應的元素值。

如果多個鍵都有元素則按照從左到右的順序取第一個鍵中的一個元素,藉此特性可以實現優先順序佇列。

釋出/訂閱模式

“釋出/訂閱”模式中包含兩種角色,分別是釋出者和訂閱者。訂閱者可以訂閱一個或者若干個頻道(channel),而釋出者可以向指定的頻道傳送訊息,所有訂閱此頻道的訂閱者都會收到此訊息。

釋出者釋出訊息的命令是PUBLISH,用法是PUBLISH channelmessage,返回值是接收到這條訊息的訂閱者數量

redis B> PUBLISH channel.1 hi

(integer)0

傳送出去的訊息不會被持久化,也就是說當有客戶端訂閱channel.1後只能收到後續釋出到該頻道的訊息,之前傳送的訊息就收不到了。

訂閱頻道的命令是SUBSCRIBE,可以同時訂閱多個頻道,用法是SUBSCRIBE channel [channel ...]

redis A> SUBSCRIBE channel.1

Readingmessages...(press Ctrl-C to quit)

  1. "subscribe"
  2. "channel.1"
  3. (integer) 1

執行SUBSCRIBE命令後客戶端會進入訂閱狀態,處於此狀態下客戶端不能使用除SUBSCRIBE/UNSUBSCRIBE/PSUBSCRIBE/PUNSUBSCRIBE4個屬於“釋出/訂閱”模式的命令之外的命令,否則會報錯。

進入訂閱狀態後,客戶端可能會收到三種類型的回覆。每種型別的回覆都包含3個值,第一個值是訊息型別,根據訊息型別不同,第二個和第三個值的含義不同。訊息型別的可能取值有:

1Subscribe。表示訂閱成功的反饋資訊。第二個值是訂閱成功的頻道名稱,第三個值是當前客戶端訂閱頻道的數量。

2message。這個型別的回覆是我們最關心的,它表示接收到的訊息。第二個值表示產生此訊息的頻道名稱,第三個值是訊息內容。

3unsubscribe。表示成功取消訂閱某個頻道。第二個值是對應的頻道名稱,第三個值是當前客戶端訂閱的頻道數量,當此值為0時,客戶端會退出訂閱狀態,之後就可以執行其他非“釋出/訂閱”模式的命令了。

按照規則訂閱

PSUBSCRIBE命令訂閱指定的規則。規則支援glob風格萬用字元格式。PSUBSCRIBE pattern [pattern ...]

redis C> PSUBSCRIBE channel.?*

Readingmessages... (press Ctrl-C to quit)

  1. "psubscribe"
  2. "channel.?*"
  3. (integer) 1

回覆:

  1. "psubscribe"
  2. "channel.?*"
  3. "channel.1"
  4. "hi!"

第一個值表示這條訊息是通過PSUBSCRIBE命令訂閱頻道而收到的,第二個值表示訂閱時使用的萬用字元,第三個值表示實際收到訊息的頻道名稱,第四個值則是訊息內容。

PUNSUBSCRIBE pattern [pattern ...]退訂指定的規則,如果沒有引數,則會退訂所有規則。

使用PUNSUBSCRIBE命令只能退訂通過PSUBSCRIBE命令訂閱的規則,不會影響直接通過SUBSCRIBE命令訂閱的頻道;同樣的是UNSUBSCRIBE命令。