1. 程式人生 > >redis的釋出訂閱缺陷

redis的釋出訂閱缺陷

雖然redis實現了釋出訂閱(publish/subscribe)的功能,但是在通常的情況下是不推薦使用的,如果想使用訊息佇列這種功能,最好還是使用專業的各種MQ中介軟體,例如rabbitMQ,rockedMQ,activitedMQ等,本文主要講一下不推薦使用redis的釋出訂閱功能的原因。

概要說一下就是,PUBLISH和SUBSCRIBE的缺陷在於客戶端必須一直線上才能接收到訊息,斷線可能會導致客戶端丟失訊息,除此之外,舊版的redis可能會由於訂閱者消費不夠快而變的不穩定導致崩潰,甚至被管理員殺掉

第一個原因是和redis系統的穩定性有關。對於舊版的redis來說,如果一個客戶端訂閱了某個或者某些頻道,但是它讀取訊息的速度不夠快,那麼不斷的積壓的訊息就會使得redis輸出緩衝區的體積越來越大,這可能會導致redis的速度變慢,甚至直接崩潰。也可能會導致redis被作業系統強制殺死,甚至導致作業系統本身不可用。新版的redis不會出現這種問題,因為它會自動斷開不符合client-output-buffer-limit pubsub配置選項要求的訂閱客戶端

第二個原因是和資料傳輸的可靠性有關。任何網路系統在執行操作時都可能會遇到斷網的情況。而斷線產生的連線錯誤通常會使得網路連線兩端中的一端進行重新連線。如果客戶端在執行訂閱操作的過程中斷線,那麼客戶端將會丟失在斷線期間的訊息,這在很多業務場景下