1. 程式人生 > >Redis學習之發布與訂閱機制

Redis學習之發布與訂閱機制

tom ger 取消 scribe mes 技術 超時 兩個 order

Redis提供了發布訂閱功能,可以用於消息的傳輸,Redis的發布訂閱機制包括三個部分,分別是發布者、訂閱者、頻道(channel)。註意:redis屬於即發即棄的機制,信息發送後則會丟失,如果訂閱者斷網就收不到該信息了。這裏的機制是客戶端綁定了發布者,和訂閱者。channel屬於服務端。發布者客戶端發送一條消息到channel後,channel會將消息發送至訂閱者,同時這條消息它不會存儲,也不管訂閱者是否能成功接收到消息。使用場景應該屬於哪種不重要的消息隊列環境。 技術分享

技術分享 發布者和訂閱者都是Redis客戶端,channel則為Redis服務端,發布者將消息發送到某個頻道,訂閱了這個頻道的訂閱者就能接收到這條消息。Redis的這種發布訂閱機制與基於主題的發布訂閱類似,channel相當於主題。 (1)發送消息 Redis采用PUBLISH命令發送消息,其返回值為接收該消息的訂閱者的數量。 127.0.0.1:6379> PUBLISH redis123 "hello" //表示有兩個訂閱者數量 (integer) 2 (2)訂閱某個頻道 Redis采用SUBSCRIBE命令訂閱某個頻道,其返回值包括客戶端訂閱的頻道,目前已訂閱的頻道數量,以及接收到的消息,其中subscribe表示已經成功訂閱了某個頻道 Reading messages... (press Ctrl-C to quit) 1) "subscribe" 2) "redis123" 3) (integer) 1 1) "message" 2) "redis123" 3) "hello" (3)取消訂閱 Redis采用UNSUBSCRIBE和PUNSUBSCRIBE命令取消訂閱,其返回值與訂閱類似。由於Redis的訂閱操作是阻塞式的,因此一旦客戶端訂閱了某個頻道或模式,就將會一直處於訂閱狀態直到退出。在SUBSCRIBE,PSUBSCRIBE,UNSUBSCRIBE和PUNSUBSCRIBE命令中,其返回值都包含了該客戶端當前訂閱的頻道和模式的數量,當這個數量變為0時,該客戶端會自動退出訂閱狀態。 Redis發布訂閱與ActiveMQ的比較 (1)ActiveMQ支持多種消息協議,包括AMQP,MQTT,Stomp等,並且支持JMS規範,但Redis沒有提供對這些協議的支持; (2)ActiveMQ提供持久化功能,但Redis無法對消息持久化存儲,一旦消息被發送,如果沒有訂閱者接收,那麽消息就會丟失;
(3)ActiveMQ提供了消息傳輸保障,當客戶端連接超時或事務回滾等情況發生時,消息會被重新發送給客戶端,Redis沒有提供消息傳輸保障。
總之,ActiveMQ所提供的功能遠比Redis發布訂閱要復雜,畢竟Redis不是專門做發布訂閱的,但是如果系統中已經有了Redis,並且需要基本的發布訂閱功能,就沒有必要再安裝ActiveMQ了,因為可能ActiveMQ提供的功能大部分都用不到,而Redis的發布訂閱機制就能滿足需求。

Redis學習之發布與訂閱機制