隊列
是一種特殊的線性表,特殊之處在於它只允許在表的前端(front)進行刪除操作,而在表的後端(rear)進行插入操作,和堆疊一樣,佇列是一種操作受限的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
訊息佇列
是在訊息的傳輸過程中保存訊息的容器。 (redis教學)
redis中的訊息佇列
redis中可以使用自帶的publish和subscribe指令完成「訊息推播」和“訊息拉取”功能,實作訊息佇列。但這種方式有一個缺陷就是,消費者必須一致在線,否則會出現消費遺漏。
訊息佇列 一般是採用一個獨立的叢集專門用於訊息存儲,可以儲存在記憶體裡 也可以直接儲存在磁碟中。例如常見的:RabbitMQ、kafka、rocketMQ、ActiveMQ、zeromq等等,它們有不同的特性,以及採用了各種不同的實現,適用於各種場景的訊息任務分發。但他們本質作用跟上面講的單一實例環境中java「隊列」沒什麼兩樣:在訊息的傳輸過程中保存訊息的容器。只是這裡轉換到「分散式」環境而已。
redis中的list(本質上是雙向鍊錶)、zset(有序set)都可以用做「訊息佇列」的容器,稍加處理就可以實現一個高可用的「訊息佇列」。使用redis實現的「輕量化」訊息佇列」有三大優勢:
1、現在redis已廣泛運用於各大系統中,無需再次引入其他第三方框架和api。
2、且redis是基於記憶體儲存的,生產者和消費者的存取速度都非常快。
3、使用redis叢集的容量,可以透過新增實例進行擴充。
滿足以上三點要求,就可以實作一個簡單的「訊息佇列」了。
以上是怎麼理解redis訊息隊列的詳細內容。更多資訊請關注PHP中文網其他相關文章!