[Redis] list底層的數據結構


前面我們使用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版本以后采用的快速列表

quicklist 是一個雙向鏈表,並且是一個ziplist的雙向鏈表,也就是說quicklist的每個節點都是一個ziplist。結合了兩者的優點


免責聲明!

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



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