redis 內部結構 ziplist

2021-08-06 04:48:28 字數 1032 閱讀 6497

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

壓縮列表是redis為了節約記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構。

1、壓縮列表的構成

2、壓縮列表節點的構成

以位元組為單位,記錄了壓縮列表中前乙個節點的長度。可以是1位元組或者5位元組;前乙個節點小於254byte就可以用1位元組儲存,前乙個位元組大於等於254byte就可以用5位元組儲存它的長度。利用這個長度,可以將壓縮列表從頭遍歷到尾,或者從給定指標遍歷到頭或者尾;

<2>encoding

記錄了節點的content屬性所儲存資料的型別以及長度;一位元組、兩位元組、五位元組長;值的最高位為00、01、10表示的是位元組陣列編碼;除了最高位記錄的型別,剩下的位記錄的是位元組陣列的長度;一位元組,值的最高位以11開頭,表示整數編碼;

<3>content

儲存節點的值;

3、連鎖更新

為了滿足前一節點,擴增當前節點,最後導致整個列表的每個節點都得更新節點的大小,這就是連鎖更新;新增或者刪除節點都有可能引起連鎖更新。

導致連鎖更新的原因:

<1>首先,壓縮列表裡要恰好有多個連續的、長度介於250位元組至253位元組之間的節點,連鎖更新才有可能發生,在實際中,這種情況並不多見;

<2>其次,即使出現連鎖更新,但只要被更新的節點的數量不多,就不會對效能造成任何影響;

引用《redis設計與實現》

redis 內部結構 quicklist

list的內部實現是雙向鍊錶,確實是乙個雙向鍊錶,而且是乙個ziplist的雙向鍊錶。quicklist的每乙個節點都是乙個ziplist。ziplist是乙個記憶體緊湊的列表 各個資料項在記憶體上都是前後相鄰的 比如,乙個包含3個節點的quicklist,如果每個節點的ziplist又包含4個資料...

HBase內部結構

table表 就是有乙個或者多個列族組成,加上之前的 使用,這個表概念應該很熟了 row行 乙個行包括了多個列,這些列通過列族來分類 column family列族 列族是多個列的集合,hbase會盡量的將乙個列族的列放入同乙個伺服器內,這樣可以提高訪問效能,並且可以批量管理有關聯的一堆列,所有的資...

Oracle檢視內部結構

1 分析資料檔案塊,轉儲資料檔案n的塊m alter system dump datafile n block m 2 分析日誌檔案 alter system dump logfile logfilename 3 分析控制檔案的內容 alter session set events immediat...