redis的發佈訂閱

所謂發佈訂閱,其實就是一個生產者消費者模型:redis

如上圖:由發佈者將消息發佈到頻道,再由訂閱者去訂閱頻道,這樣一來,發佈者每發佈一條消息到對應頻道,那麼訂閱了該頻道的訂閱者所有都會收到消息 (注意:若是一個新的訂閱者訂閱頻道,那麼它是沒法收到歷史消息的,即以前該頻道發佈的消息)緩存

相關API

publish [channel message] --- 向頻道channel發佈消息message,返回值是訂閱者的個數。數據結構

subscribe [channel...] --- 訂閱頻道(一個或多個)返回對應頻道的信息spa

unsubscribe [channel...] --- 取消一個或多個訂閱隊列

psubscribe [pattern...] --- 按模式訂閱,如訂閱以什麼字母開頭的頻道。消息隊列

punsubscribe [pattern...] --- 退訂指定的模式。channel

pubsub channels --- 列出至少有一個訂閱者的頻道。im

pubsub numsub [channel...] --- 列出給定頻道的訂閱者數量數據

pubsub numpat [pattern...] --- 列出被訂閱模式的數量img

發佈訂閱與消息隊列的區別

發佈訂閱和消息隊列都是生產者消費者模型,它們不一樣的是,當消息發佈者發佈一條消息時,發佈訂閱的全部訂閱者(訂閱了該頻道的)都會收到對應的消息。而消息隊列是一個搶的特色,即只有一個消費者能拿到這條消息。redis中並無提供一個叫消息隊列的功能,但咱們能夠用list這種數據結構,配合lpush,brpop來實現一個消息隊列。

那麼如何選擇消息隊列仍是發佈訂閱呢?

舉例:1.若是咱們須要同時刪除全部訂閱者的本地緩存,這種場景那就能夠使用發佈訂閱,由於他們都能收到消息,從而執行清除本地緩存 2. 若是是一個搶紅包隊列,這時候能夠用消息隊列,只要一個消費者拿到就ok。

相關文章
相關標籤/搜索