Redis消息隊列

  消息隊列主要分爲兩種,分別是生產者消費者模式和發佈者訂閱者模式,這兩種模式 Redis 都支持。

生產消費者模式

  在生產消費者(Producer/Consumer)模式下, 上層應用接收到的外部請求後開始處理其當前步驟的操作,在執行完成後將已經完成的操作發送至指定的頻道(channel)當中,並由其下層的應用監聽該頻道並繼續下一步的操作, 如果其處理完成後沒有下一步的操作就直接返回數據給外部請求,如果還有下一步的操作就再將任務發佈到另外一個頻道, 由另外一個消費者繼續監聽和處理。

生產消費這模式介紹

  生產者消費者模式下, 多個消費者同時監聽一個隊列,但是一個消息只能被最先搶到消息的消費者消費, 即消息任務是一次性讀取和處理, 此模式在分佈式業務架構中非常常用, 比較常用的軟件還有RabbitMQ、 Kafka、 RocketMQ、 ActiveMQ 等

Redis消息隊列

隊列介紹

  隊列當中的 消息由不同的生產者寫入也會有不同的消費者取出進行消費處理,但是一個消息一定是隻能被取出一次也就是被消費一次。

Redis消息隊列

生產者發佈消息

127.0.0.1:6379> LPUSH channel1 msg1 # 從管道的左側寫入
(integer) 1
127.0.0.1:6379> LPUSH channel1 msg2
(integer) 2
127.0.0.1:6379> LPUSH channel1 msg3
(integer) 3
127.0.0.1:6379> LPUSH channel1 msg4
(integer) 4
127.0.0.1:6379> LPUSH channel1 msg5
(integer) 5

查看隊列所有消息

127.0.0.1:6379> LRANGE channel1 0 -1
1) "msg5"
2) "msg4"
3) "msg3"
4) "msg2"
5) "msg1"

消費者消費消息

127.0.0.1:6379> RPOP channel1 # 從管道的右側消費
"msg1"
127.0.0.1:6379> RPOP channel1
"msg2"
127.0.0.1:6379> LRANGE channel1 0 -1
1) "msg5"
2) "msg4"
3) "msg3"
127.0.0.1:6379> RPOP channel1
"msg3"
127.0.0.1:6379> RPOP channel1
"msg4"
127.0.0.1:6379> RPOP channel1
"msg5"
127.0.0.1:6379> RPOP channel1
(nil)

驗證隊列消息

127.0.0.1:6379> LRANGE channel1 0 -1
(empty list or set)  # 隊列中的消息已經被已全部消費完畢

發佈者訂閱模式

  在發佈者訂閱者模式下,發佈者將消息發佈到指定的 channel 裏面, 凡是監聽該 channel 的消費者都會收到同樣的一份消息,這種模式類似於是收音機模式,即凡是收聽某個頻道的聽衆都會收到主持人發佈的相同的消息內容。
  此模式常用語羣聊天、 羣通知、羣公告等場景。
  Subscriber:訂閱者
  Publisher: 發佈者
  Channel: 頻道

Redis消息隊列

監聽者監聽頻道

[root@centos7-6 ~]#redis-cli 
127.0.0.1:6379> SUBSCRIBE channel1  # 訂閱者訂閱指定頻道
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1

發佈者發佈消息

[root@centos7-6 ~]#redis-cli
127.0.0.1:6379> PUBLISH channel1 test1  # 發佈消息
(integer) 1
127.0.0.1:6379> PUBLISH channel1 test2
(integer) 1

訂閱者驗證消息

[root@centos7-6 ~]#redis-cli 
127.0.0.1:6379> SUBSCRIBE channel1
Reading messages... (press Ctrl-C to quit)
1) "subscribe"
2) "channel1"
3) (integer) 1
1) "message"
2) "channel1"
3) "test1"    # 發佈者發佈的test1消息
1) "message"
2) "channel1"
3) "test2"    # 發佈者發佈的test2消息

訂閱多個頻道

# 訂閱指定的多個頻道
127.0.0.1:6379> SUBSCRIBE channel1 channel2

訂閱所有頻道

127.0.0.1:6379> PSUBSCRIBE *

訂閱匹配的頻道

127.0.0.1:6379> PSUBSCRIBE chann* #匹配訂閱多個頻道
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章