壓縮串列是串列鍵與哈希鍵的底層實作之一,當一個串列鍵只包含少量的串列項,并且每個串列項要么就是小整數值,要么就是長度較短的字串,那么Redis就會使用壓縮串列來做串列鍵的底層實作,
壓縮串列是為了節約記憶體而開發的,是由一系列特殊編碼的連續記憶體塊組成的順序型資料結構,一個壓縮串列可以包含任意多的節點,每個節點可以保存一個位元組陣列或一個整數值,
壓縮表可以包含:
1、長度小于等于63位元組的位元組陣列
2、長度小于16383位元組的位元組陣列
3、長度小于等于4294967295位元組的位元組陣列
4、4位長度的無符號整數
5、1位元組長度有符號整數
6、3位元組長的有符號整數
7、int16型別的整數
8、int32型別的整數
9、int64型別的整數
每個壓縮串列節點都由previous_entry_length、encoding、content三部分組成
說明:previous_entry_length 保存前一節點的長度,如果前一個節點長度小于254節點,那么previous_entry_length屬性需要1位元組長的空間來保存這個長度值;如果超度254則需要5個位元組長的空間來保存這個長度,
連鎖更新
由于是連續的記憶體片段,當在中間插入一個元素時,

e1節點的 previous_entry_length屬性僅長1位元組,當將new節點設定為前置節點時,由于e1的previous_entry_length 長度為1無法保存new節點的長度,所以需要將長度擴展到5個位元組空間,因此需要對串列進行空間重新分配操作,同理,如果引發了對e2、e3.,,,的擴展,這種操作稱為連鎖更新,
連鎖更新在最壞的情況下需要對壓縮串列執行n次空間的重分配操作,每次空間重分配的最壞復雜度為O(N),所以連鎖更新最壞的的復雜度為O(N2),
-------- end --------
每天學一點,總會有識訓,
說明:尊重作者知識產權,文中內容參考《Redis設計與實作》,僅在此做學習與大家分享,

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/3165.html
標籤:NoSQL
上一篇:Cassandra資料建模
下一篇:Redis簡介
