查看對象編碼
可以看到對象的數據類型為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消息隊列方案介紹