redis的發布訂閱缺陷


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

 

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

 

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM