[Redis] list底層的數據結構

前面咱們使用list實現過隊列 , 如今就來看一下list的底層結構redis

list有兩種實現方式:數組

1. 壓縮鏈表數據結構

壓縮列表(ziplist)是Redis爲了節省內存而開發的,是由一系列特殊編碼的連續內存塊組成的順序型數據結構,一個壓縮列表能夠包含任意多個節點(entry),每一個節點能夠保存一個字節數組或者一個整數值。重點是內存連續ui

2.雙端鏈表編碼

prev和next兩個指針 , 重點是能夠從前日後也能夠從後往前 , 這就能夠實現lpush rpush這些指令了spa

 

由於用的鏈表 , 因此這也就致使了lindex指令 , 獲取某個索引值的元素 , 須要遍歷鏈表才能夠獲取到 , 時間複雜度是 O(n)指針

 

當列表對象能夠同時知足下列兩個條件時,列表對象採用壓縮鏈表編碼:對象

(1)列表對象保存的全部字符串元素的長度都小於64字節;索引

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

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

不然採用雙端鏈表編碼

 

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

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

相關文章
相關標籤/搜索