消息隊列(Message Queue)是一種應用間的通訊方式,消息發送後能夠當即返回,由消息系統來確保消息的可靠傳遞。消息發佈者只管把消息發佈到 MQ 中而不用管誰來取,消息使用者只管從 MQ 中取消息而無論是誰發佈的。這樣發佈者和使用者都不用知道對方的存在。
redis
在個人學習過程當中,redis就是一個內存數據庫,具備豐富的數據類型,固然也支持隊列queue,redis支持數據持久化,主從集羣。Redis不單單支持簡單的key-value類型的數據,同時還提供list,set,zset,hash等數據結構的存儲。
RabbitMQ
是一個專門作隊列的框架,在隊列方面要比redies隊列性能要好,支持的功能會更多,消息的可靠性更強,能夠根據路由規則去選擇進入哪個隊列,作到更加細緻的消息分發
可靠性
redis :沒有相應的機制保證消息的可靠消費,若是發佈者發佈一條消息,而沒有對應的訂閱者的話,這條消息將丟失,不會存在內存中;
rabbitmq:具備消息消費確認機制,若是發佈一條消息,尚未消費者消費該隊列,那麼這條消息將一直存放在隊列中,直到有消費者消費了該條消息,以此能夠保證消息的可靠消費,那麼rabbitmq的消息是如何存儲的呢?(後續更新);
實時性
redis:實時性高,redis做爲高效的緩存服務器,全部數據都存在內存中,因此它具備更高的實時性
消費者負載均衡:
rabbitmq隊列能夠被多個消費者同時監控消費,可是每一條消息只能被消費一次,因爲rabbitmq的消費確認機制,所以它可以根據消費者的消費能力而調整它的負載;
redis發佈訂閱模式,一個隊列能夠被多個消費者同時訂閱,當有消息到達時,會將該消息依次發送給每一個訂閱者,她是一種消息的廣播形式,redis自己不作消費者的負載均衡,所以消費效率存在瓶頸;
持久性
redis:redis的持久化是針對於整個redis緩存的內容,它有RDB和AOF兩種持久化方式(redis持久化方式,後續更新),能夠將整個redis實例持久化到磁盤,以此來作數據備份,防止異常狀況下致使數據丟失。
rabbitmq:隊列,每條消息均可以選擇性持久化,持久化粒度更小,更靈活;
隊列監控
rabbitmq實現了後臺監控平臺,能夠在該平臺上看到全部建立的隊列的詳細狀況,良好的後臺管理平臺能夠方面咱們更好的使用;
redis沒有所謂的監控平臺。
總結
redis:輕量級,低延遲,高併發,低可靠性;
rabbitmq:重量級,高可靠,異步,不保證明時;
rabbitmq是一個專門的AMQP協議隊列,他的優點就在於提供可靠的隊列服務,而且可作到異步,而redis主要是用於緩存的,redis的發佈訂閱模塊,可用於實現及時性,且可靠性低的功能。redis
更多技術資訊可關注:gzitcast數據庫