Redis系列(五) 訊息佇列

2022-02-04 14:31:00 字數 1715 閱讀 8306

訊息佇列已經成為現在網際網路服務端的標配元件,現在比較常用的訊息中介軟體有rabbitmq、kafka、rocketmq、activemq。說出來你可能不信,redis作為乙個快取中介軟體,居然也提供了訊息佇列的功能。

redis提供的訊息佇列功能是發布/訂閱模型,它引入了channel的概念,即訂閱者訂閱了某個channel,當有發布者往這個channel中發布訊息,訂閱者就能收到。這和讀者訂閱雜誌的原理是一樣的,讀者相當於訂閱者,一間雜誌社會有多種雜誌,當讀者訂閱了其中一種雜誌後,每當雜誌發售日,雜誌社就會發布雜誌,讀者就能收到了。

看一下redis提供的命令

完整命令引數為subscribe channel [channel ...]

訂閱乙個或多個channel

127.0.0.1:6379> subscribe ch1

reading messages... (press ctrl-c to quit)

1) "subscribe"

2) "ch1"

3) (integer) 1

訂閱名稱為ch1的channel,成功後會停止在此介面,等待接收訊息。結果的1、2、3分別表示行為、channel名稱和結果,比如上面是訂閱了ch1,1個訂閱成功

完整命令引數為publish channel message

向channel發布一條message的訊息

保持上面的例子的終端不要動,另外開啟乙個終端視窗,然後連線redis,執行以下的命令

127.0.0.1:6379> publish ch1 hello

(integer) 1

在新開啟的終端發布向名稱為ch1的channel發布一條內容為hello的訊息,成功後可以看到原來的終端介面收到了這條訊息

127.0.0.1:6379> subscribe ch1

reading messages... (press ctrl-c to quit)

1) "subscribe"

2) "ch1"

3) (integer) 1

1) "message"

2) "ch1"

3) "hello"

第乙個1、2、3是訂閱時返回的結果,第二個1、2、3是收到了訊息,channel名為ch1,內容是hello。

完整命令是unsubscribe [channel [channel ...]]

退訂指定的channel,channel是可選的,如果不指定channel,會退訂所有的channel。

完整命令引數為psubscribe pattern [pattern ...]

訂閱給定的模式

這個命令和subscribe命令一樣都是訂閱,但這個引數是乙個模式。這裡的pattern支援以下三種方式:

h?llo: 訂閱hello、hallo和hxllo,意思是?代表乙個字元

h*llo:訂閱hllo和heeeello,意思是*代表任意個字元

h[ae]llo:訂閱hello和hallo,但是不訂閱hillo,意思是只能是[ ]內的乙個字元,[ ]也支援[a-z]的寫法,代表字母a到字母z的任意乙個字元。

如果使用過正規表示式就很容易理解。

完整命令引數為punsubscribe [pattern [pattern ...]]

取消訂閱給定的模式,不指定pattern表示取消所有的訂閱。pattern引數的含義和psubscribe完全一致。

Redis訊息佇列

redis的訊息佇列使用簡單,沒有什麼配置,比activemq要輕量級太多,當然功能也比較簡單,如果只需要簡單的訂閱以及發布,可以考慮使用它。訂閱操作 命令為 subscribe channel channel 如 1 所示,即成功訂閱頻道 redis.blog 發布操作 命令為publish ch...

Redis 訊息佇列

訊息佇列,是在構建大型專案的時候 經常會用到的中間價系統,使用訊息佇列有很多好處,例如 1.實現各元件之間的松耦合。利用訊息系統可以使各個元件之間面向資料,而不是面向具體的介面。2.易於擴充套件。對於訊息系統而言,消費者和生產者都可以橫向擴充套件。提到佇列,很自然的就會想到redis的列表型別,可以...

Redis訊息佇列

redis的訊息佇列使用簡單,沒有什麼配置,比activemq要輕量級太多,當然功能也比較簡單,如果只需要簡單的訂閱以及發布,可以考慮使用它。訂閱操作 命令為 subscribe channel channel 如 1 所示,即成功訂閱頻道 redis.blog 發布操作 命令為publish ch...