redis是一個高性能的key-value數據庫,支持消息推送功能,可以當做一個輕量級的隊列服務器使用。
redis只是提供一個高性能的、原子操作內存鍵值隊,具有高速訪問能力,雖然可以做消息隊列的存儲,但不具備消息隊列的任何功能和邏輯。
redis2.0開始支持發布/訂閱指令,發布者調用redis的pushlish方法往特定的channel發送消息,訂閱者在初始化的時候訂閱該channel,有消息就會立即接收。
redis消息推送多用于實時性較高的消息推送,并不保證可靠。MQ保證可靠但有一些延遲。
redis發布訂閱除了表示不同的topic外,并不支持分組。MQ發布消息,多個訂閱者可以分組,同一個組里只有一個訂閱者會收到該消息。
mq的優勢在于提供可靠的隊列服務,可以做到異步,redis主要用于緩存,redis的發布訂閱模塊,可實現及時性,且可靠性低的功能。
1.可靠性
redis:沒有機制保證消息的可靠性,發布一條消息沒有對應的訂閱者的話,這條消息將丟失,不會存在內存中。
mq:具有消息確認機制,發布一條消息,沒有消費者消費該隊列,這條消息一直存放在隊列中,直到有消費者消費了該條消息,保證消息的可靠消費。
2.實時性
redis實時性高,redis是高效的緩存服務器,所有數據到存在內存中,所以具有更高的實時性。
3.消費者負載均衡
mq隊列可以被多個消費者同時監控消費,但每一條消息只能消費一次,由于mq的消費確認機制,因此能夠根據消費者的消費能力調整負載。
redis發布訂閱模式,一個隊列可被多個消費者同時訂閱,消息到達時,會將消息一次發送給每個訂閱者,是一種消息的廣播形式,redis本身不做消費者的負載均衡,因此消費效率存在瓶頸。
4.持久性
redis:redis的持久化是針對整個redis緩存,可將整個redis實例持久化到磁盤來做備份,以防止異常情況下導致數據丟失。
mq:每條消息都可以選擇持久化,持久化粒度更小,更靈活。
5.隊列監控
mq實現了后臺監控平臺,可在平臺上看到所有創建的隊列的詳細情況。redis沒有監控平臺。
6.性能
發布消息時,數據較小時,redis性能高于mq,數據大小超過10K時redis比較慢。讀取消息時,無論數據大小,redis性能高于mq。
總結:
redis:輕量級,低延遲,高并發,低可靠性。
mq:重量級,高可靠,一步,不保證實時。
參考:redis 和 mq的區別 - CH|heyi - 博客園