1. 程式人生 > 其它 >Redis的底層資料結構-壓縮列表

Redis的底層資料結構-壓縮列表

壓縮列表(ziplist)是Redis為了節省記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構,一個壓縮列表可以包含任意多個節點(entry),每個節點可以儲存一個位元組陣列或者一個整數值。

  壓縮列表的原理:壓縮列表並不是對資料利用某種演算法進行壓縮,而是將資料按照一定規則編碼在一塊連續的記憶體區域,目的是節省記憶體。

  

  壓縮列表的每個節點構成如下:

  

  ①、previous_entry_ength:記錄壓縮列表前一個位元組的長度。previous_entry_ength的長度可能是1個位元組或者是5個位元組,如果上一個節點的長度小於254,則該節點只需要一個位元組就可以表示前一個節點的長度了,如果前一個節點的長度大於等於254,則previous length的第一個位元組為254,後面用四個位元組表示當前節點前一個節點的長度。利用此原理即當前節點位置減去上一個節點的長度即得到上一個節點的起始位置,壓縮列表可以從尾部向頭部遍歷。這麼做很有效地減少了記憶體的浪費。

  ②、encoding:節點的encoding儲存的是節點的content的內容型別以及長度,encoding型別一共有兩種,一種位元組陣列一種是整數,encoding區域長度為1位元組、2位元組或者5位元組長。

  ③、content:content區域用於儲存節點的內容,節點內容型別和長度由encoding決定。