Redis list底層的資料結構

2021-10-12 03:08:44 字數 578 閱讀 7946

前面我們使用list實現過佇列 , 現在就來看一下list的底層結構

list有兩種實現方式:

1. 壓縮鍊錶

壓縮列表(ziplist)是redis為了節省記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構,乙個壓縮列表可以包含任意多個節點(entry),每個節點可以儲存乙個位元組陣列或者乙個整數值。重點是記憶體連續

2.雙端鍊錶

prev和next兩個指標 , 重點是可以從前往後也可以從後往前 , 這就可以實現lpush rpush這些指令了

因為用的鍊錶 , 所以這也就導致了lindex指令 , 獲取某個索引值的元素 , 需要遍歷鍊錶才可以獲取到 , 時間複雜度是 o(n)

當列表物件可以同時滿足下列兩個條件時,列表物件採用壓縮鍊錶編碼:

(1)列表物件儲存的所有字串元素的長度都小於64位元組;

(2)列表元素儲存的元素數量小於512個;

以上兩個條件的上限值可以在配置檔案中修改 list-max-ziplist-value選項和 list-max-ziplist-entries選項

否則採用雙端鍊錶編碼

redis3.2版本以後採用的快速列表

clickhouse insert的資料結構

clickhouse insert大致分為兩部分 1.sql語句部分 insert into table f1,f2 2.資料部分資料部分又分為3部分 頭,資料,尾 資料頭 資料塊1 資料塊2 資料塊n 資料尾從中可以看出 每個insert可以包含多個資料塊,每個資料塊可以包含多行。乙個完整的ins...

Redis List 資料結構的優越感

業務需求 從1000條使用者登入記錄中選擇最新登入的前5個使用者 ps 預設使用mysql資料庫 select from user order by logintime desc limit 5為了解決查詢效率,你可能會設定字段索引。沒錯,這個需求你成功的解決了。但是,當資料量的級別達到上萬,百萬,...

Redis List和MQ的區別

容錯機制需要保證出錯後資訊還會被重新插入佇列,在redis中需要手動trycatch處理。在其他訊息佇列中都有提供容錯機制,比如訊息取出變為掛起狀態,一定時間內沒有刪除就會重新插入佇列。訊息佇列中有延遲的概念,取出後判斷是否在延遲時間內,如果在則重新插入佇列,達到延遲效果。redis的推送方式注重快...