一般來說,訊息佇列有兩種場景,一種是發布者訂閱者模式,一種是生產者消費者模式。利用redis這兩種場景的訊息佇列都能夠實現。
生產者消費者模式(push/ brpop):生產者lpush將訊息資料新增到list結構中,消費者通過rpop或者brpop消費訊息,brpop是阻塞的方式,可以設定等待時長。如果有多個消費者同時監聽該列表,只有乙個能取到訊息。
發布者訂閱者模式(pub/sub):發布者和訂閱者通過channel頻道解偶, 訂閱者監聽某個channel的訊息,當發布者向該channel推送訊息時,訂閱該channel的消費者都可以收到訊息。
redis訂閱訊息有兩種方式,一種是channel方式,固定只監聽某一頻道的訊息;另一種是pattern方式,模糊匹配channel,收取匹配到的所有channel的訊息。
在redis server中,有乙個資料字典pubsub_channels用於儲存channel以及訂閱者的關係,結構如下:
當有客戶端訂閱某個channel時,如果pubsub_channels不存在該channel,就會追加乙個channel,每個channel所有的訂閱者是以鍊錶的形式存在。
演示:通過subscribe命令訂閱了mychannel頻道,subscrbe可以訂閱多個頻道
psubscribe命令表示按照模糊匹配的方式監聽頻道,支援多個
publish命令向mychannel推送訊息
收到訊息
問題:redis發布訂閱訊息採用「傳送即忘(fire and forget)」的策略,如果訂閱者重啟或者宕機,都有可能導致訊息丟失,因此redis發布訂閱機制並不是可靠的訊息通道,僅適用於對訊息準確性要求不嚴格的場景,例如:日誌打點等。
Redis 發布訂閱
redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖展示了頻道 channel1 以及訂閱這個頻道的三個客戶端 client2 client5 和 client1 之間的關係 當有新訊息通過 pu...
Redis 發布訂閱
redis 發布訂閱 pub sub 是一種訊息通訊模式 傳送者 publish 傳送訊息,訂閱者 subscribe 接收訊息。redis 客戶端可以訂閱任意數量的頻道。下圖是 頻道 channel1 以及訂閱這個頻道的三個客戶端 client1 client2和 client3 當有新訊息通過 ...
Redis發布訂閱
概述 redis發布訂閱 pub sub 是種訊息通訊模式 傳送者 pub 傳送訊息,訂閱者 sub 訂閱訊息。redis客戶端可以訂閱任意數量的頻道。下圖展示了頻道channel以及訂閱它的三個客戶端 client2 client5和client1之間的關係 當有新的訊息publish到chann...