Redis設計與實現 壓縮列表ziplist

2021-09-10 05:36:20 字數 1366 閱讀 7970

壓縮列表是列表鍵和雜湊鍵底層實現之一。

例:

previous_entry_length:該屬性以位元組為單位,可以是1位元組或者5位元組,記錄了壓縮列表中前乙個節點的長度。

1位元組:前一節點的長度小於254位元組。

5位元組:前一節點長度大於等於254位元組;其中第一位元組會被設定為0xfe(十進位制254),之後的四個位元組用於儲存前一節點的長度。

encoding:記錄了節點content屬性所儲存資料的型別以及長度。

1位元組、2位元組、5位元組:最高位為00、01、10的是位元組陣列編碼,表示content屬性儲存著位元組陣列,陣列的長度由編碼除去最高兩位之後的其他位記錄。

1位元組:最高位是11的是整數編碼,表示content儲存著整數值,整數值的型別和長度由編碼除去最高兩位之後的其他位記錄。

content:儲存節點的值,值是乙個位元組陣列或者整數,值得型別和長度由節點的encoding屬性決定。

新增或刪除節點時,previous_entry_length從1位元組擴充套件到5位元組,而引起一系列的節點重新分配空間。

觸發條件:

1)壓縮列表中有多個連續的、長度介於250位元組至253位元組之間的節點

2)新增或者刪除節點

如圖:

重點回顧:

1、壓縮列表是一種為節約記憶體而開發的順序型資料結構。

2、壓縮列表被用作列表鍵和雜湊鍵的底層實現之一。

3、壓縮列表可以包含多個節點,每個節點可以儲存乙個位元組陣列或者整數值。

4、新增或刪除壓縮列表中節點時,可能會引發連鎖更新操作,但這種操作出現的機率並不高(觸發條件不好滿足)。

《Redis設計與實現》之第七章 壓縮列表

壓縮列表是列表鍵和雜湊鍵的底層實現之一。壓縮列表是為了節約記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構。壓縮列表是一種資料結構,這種資料結構的功能是將一系列資料與其編碼資訊儲存在一塊連續的記憶體區域,這塊記憶體物理上是連續的,邏輯上被分為多個組成部分,其目的是在一定可控的時間...

《Redis設計與實現》之第七章 壓縮列表

壓縮列表是列表鍵和雜湊鍵的底層實現之一。壓縮列表是為了節約記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構。壓縮列表是一種資料結構,這種資料結構的功能是將一系列資料與其編碼資訊儲存在一塊連續的記憶體區域,這塊記憶體物理上是連續的,邏輯上被分為多個組成部分,其目的是在一定可控的時間...

redis 壓縮列表

壓縮列表是列表鍵和雜湊鍵的底層實現之一。當乙個列表鍵只包含少量列表項,並且每個列表項要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會使用壓縮列表來做列表鍵的底層實現。另外,當乙個雜湊鍵只包含少量鍵值對,並且每個鍵值對的鍵和值要麼就是小整數值,要麼就是長度比較短的字串,那麼redis就會...