古詩詞大全網 - 成語大全 - Redis 多消費隊列方案

Redis 多消費隊列方案

首先在Redis-cli中使用XADD命令插入壹條數據

查看對象編碼

可以看到對象的數據類型為stream,返回的streamID 的基本結構為 "{timestamp}-{sequence}"

使用XINFO命令查看該 stream Key 的基本信息

可以看到stream中使用了壹種 "radix-tree" 數據結構。

Radix樹對上述單詞的存儲

當插入first時

相比於普通的字典樹,Radix樹會將單節點樹枝壓縮為壹個節點,以節省存儲空間,提高搜索的效率。在Streams結構中,默認生成的StreamID為 時間戳+自增序列號 的形式,當消息的時間分布緊湊時,這種存儲結構多個StreamID復用的前綴將很長,可以將存儲空間壓縮得很小,這對於內存使用內存存儲數據的Redis很重要。Radix樹的另壹個優點是解決了hash沖突的問題。對於壹般的hash結構,當遇到hash沖突的情況,壹般采用鏈地址法的方式解決沖突。這樣壹個hash槽中的鏈可能會很長,如果采用擴容的方式,執行效率壹般也不是很高。采用樹結構索引數據解決了hash沖突的問題。當然,Radix樹在遇到新插入的數據時也會遇到數據節點拆分的問題。

stream 是壹種 append-only 的數據結構,只有 del 命令可以刪除對應的Key。

指定添加數據的最大長度(~表示只在節點刪除時清除數據,能保證數據個數的最大長度不小於 LENGTH 個,不需要每次調整Radix樹,性能相對較好)

阻塞式,獲取最新1條的數據(阻塞單位:ms)

根據Streams支持的命令,要使用Streams作為多消費隊列,主要有以下幾點:

官網介紹

中文官網命令介紹

圖解Redis數據結構,講的比較好

知乎上基於Redis消息隊列方案介紹