雖然redis實現了發佈訂閱(publish/subscribe)的功能,可是在一般的狀況下是不推薦使用的,若是想使用消息隊列這種功能,最好仍是使用專業的各類MQ中間件,例如rabbitMQ,rockedMQ,activitedMQ等,本文主要講一下不推薦使用redis的發佈訂閱功能的緣由。redis
概要說一下就是,PUBLISH和SUBSCRIBE的缺陷在於客戶端必須一直在線才能接收到消息,斷線可能會致使客戶端丟失消息,除此以外,舊版的redis可能會因爲訂閱者消費不夠快而變的不穩定致使崩潰,甚至被管理員殺掉網絡
第一個緣由是和redis系統的穩定性有關。對於舊版的redis來講,若是一個客戶端訂閱了某個或者某些頻道,可是它讀取消息的速度不夠快,那麼不斷的積壓的消息就會使得redis輸出緩衝區的體積愈來愈大,這可能會致使redis的速度變慢,甚至直接崩潰。也可能會致使redis被操做系統強制殺死,甚至致使操做系統自己不可用。新版的redis不會出現這種問題,由於它會自動斷開不符合client-output-buffer-limit pubsub配置選項要求的訂閱客戶端操作系統
第二個緣由是和數據傳輸的可靠性有關。任何網絡系統在執行操做時均可能會遇到斷網的狀況。而斷線產生的鏈接錯誤一般會使得網絡鏈接兩端中的一端進行從新鏈接。若是客戶端在執行訂閱操做的過程當中斷線,那麼客戶端將會丟失在斷線期間的消息,這在不少業務場景下是不可忍受的。中間件