Redis可以用作消息隊列嗎?


消息隊列

      所謂的"消息隊列"就是:在消息的傳輸過程中保存消息的容器。上次有朋友面試,面試官就問,redis可以用作消息隊列嗎?當時一懵。每當想到消息隊列:我們都會想到RabbitMQActiveMQ,RocketMQ,等等一些專業的消息中間件。但是如果我們做的事情比較簡單業務邏輯不是很復雜,只需要有一個消息隊列,使用專業的消息中間件是非常麻煩的,因此我們可以使用Redis做消息隊列。

如果對消息的可靠性沒有較高的要求的話,那么就可以使用Redis去實現。

Redis做消息隊列,可以使用List這個數據類型。List里面有兩個命令,lpush/rpush操作來實現入隊,然后使用lpop/rpop實現出列

在客戶端中,我們會維護一個死循環來不停的從隊列中pop讀取數據,如果隊列中有消息,則直接讀取,如果沒有,就會陷入死循環,直到下一次有消息進入。這種死循環會造成大量的資源浪費,這個時候我們可以使用,blpop/brpop去處理,相當於lpop的阻塞,當沒有消息到來的時候就會休眠,直到消息來臨,才喚醒,pop去讀取數據。在java中可以使用while循環去實現

延遲消息隊列

      延遲消息隊列,可以用zset實現,里面有score分數浮動數值,數據 可以根據core排序,zset可用於高效的檢索,我們可以將時間作為score,將value存到redis中,然后通過輪詢的方式去讀取消息出來,在當前時間的基礎上在加5s,就可以實現延遲消息隊列。

首先,如果消息是字符串,直接發送就可以,如果是對象,則需要序列化,實現序列化接口或者使用JSON進行序列化和反序列化。

步驟一:構造一個消息對象。

步驟二:封裝消息隊列,包括消息入隊,和消息出列

步驟三:測試,構造消息隊列,構造一個消息生產者,構造一個消息消費者。

本文轉載學習來自:https://www.cnblogs.com/javazl/p/12729462.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM