壓縮列表(ziplist)是列表鍵和雜湊鍵的底層實現之一。當乙個列表鍵只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字串,redis就會使用壓縮列表來做列表鍵的底層實現。
下面看一下壓縮列表實現的列表鍵:
列表鍵裡面包含的都是1、3、5、10086這樣的小整數值,以及''hello''、''world''這樣的短字串。
再看一下壓縮列表實現的雜湊鍵:
壓縮列表是redis為了節約記憶體而開發的,是一系列特殊編碼的連續記憶體塊組成的順序型資料結構。
乙個壓縮列表可以包含任意多個節點,每個節點可以儲存乙個位元組陣列或者乙個整數值。
看一下壓縮列表的示例:
看一下包含五個節點的壓縮列表:
節點的encoding屬性記錄了節點的content屬性所儲存資料的型別以及長度。
節點的content屬性負責儲存節點的值,節點值可以是乙個位元組陣列或者整數,值的型別和長度由節點的encoding屬性決定。
連鎖更新:
每個節點的previous_entry_length屬性都記錄了前乙個節點的長度,那麼當前乙個節點的長度從254以下變成254以上時,本節點的儲存前乙個節點的長度的previous_entry_length就需要從1位元組變為5位元組。
那麼後面的節點的previous_entry_length屬性也有可能更新。不過連鎖更新的機率並不大。
總結:
redis 壓縮列表
壓縮列表是列表鍵和雜湊鍵的底層實現之一。當乙個列表鍵只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會使用壓縮列表來做列表鍵的底層實現。另外,當乙個雜湊鍵只包含少量鍵值對,並且每個鍵值對的鍵和值要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會...
Redis底層結構之壓縮列表
壓縮列表是一塊連續的記憶體空間,zset hash容器在元素物件較少的時候,採用壓縮列表。struct entry因為ziplist是緊湊儲存,插入乙個新元素,需要realloc擴充套件記憶體,會重新分配記憶體空間,將內容進行拷貝 如果ziplist占用記憶體太大,重新分配記憶體和拷貝記憶體機會有很...
redis筆記 壓縮列表
1.壓縮列表 壓縮列表是列表鍵和雜湊鍵的底層實現之一,當包含的少量列表項並且列表項是小整數值或者較短字串時,redis會使用壓縮列表鍵的底層實現 2.壓縮列表的構成 zlbytes 壓縮列表的總長 zltail 尾節點距離壓縮列表起始位址的便宜量 zllen 表示壓縮列表包含的節點數量 3.壓縮列表...