redis 消息推送(基於分布式 pub/sub)多用於實時性較高的消息推送,並不保證可靠。
其他的mq和kafka保證可靠但有一些延遲(非實時系統沒有保證延遲)。redis-pub/sub斷電就清空,而使用redis-list作為消息推送雖然有持久化,但是又太弱智,也並非完全可靠不會丟。
另外一點,redis 發布訂閱除了表示不同的 topic 外,並不支持分組,比如kafka中發布一個東西,多個訂閱者可以分組,同一個組里只有一個訂閱者會收到該消息,這樣可以用作負載均衡。
比如,kafka 中發布:topic = "發布帖子" data="文章1" 這個消息,后面有一百台服務器每台服務器都是一個訂閱者,都訂閱了這個 topic,但是他們可能分為三組,A組50台,用來真的做發布文章,A組50台里所有 subscriber 都訂閱了這個topic。
由於在同一組,這條消息 (topic="發布帖子", data="文章1")只會被A組里面一台當前空閑的機器收到。而B組25台服務器用於統計,C組25台服務器用於存檔備份,每組只有一台會收到。
用不同的組來決定每條消息要抄送出多少分去,用同組內哪些訂閱者忙,哪些訂閱者空閑來決定消息會被分到哪台服務器去處理,生產者消費者模型嘛。
