Redis - set底層資料結構
阿新 • • 發佈:2022-04-13
Set物件編碼可以是 intset 或者 hashtable。
1、intset
intset 編碼的集合物件使用整數集合作為底層實現, 集合物件包含的所有元素都被儲存在整數集合裡面。
舉個例子, 以下程式碼將建立一個intset 編碼集合物件:
2、hashtable
hashtable 編碼的集合物件使用字典作為底層實現,字典的每個鍵都是一個字串物件,每個字串物件包含了一個集合元素,而字典的值則全部被設定為 NULL。
舉個例子, 以下程式碼將建立一個 hashtable 編碼集合物件:
3、編碼轉換
當Set物件可以同時滿足以下兩個條件時,則使用 intset 編碼:
1)Set物件儲存的所有元素都是 整數值;
2)Set物件儲存的元素數量不超過 512 個(預設值,配置引數set-max-intset-entries可以修改);
不能滿足這兩個條件的Set物件需要使用 hashtable 編碼。
注意:第二個條件的上限值是可以修改的,具體請看配置檔案。
set-max-intset-entries 選項的說明:對於使用 intset 編碼的Set物件來說,當使用 intset 編碼所需兩個條件的任意一個不能被滿足時,物件的編碼轉換操作就會被執行,原本儲存在整數集合中的所有元素都會被轉移並儲存到字典裡面,並且物件的編碼也會從 intset 變為 hashtable。
示例1: 不滿足“所有元素都是 整數值”
示例2: 不滿足“元素數量不超過 512 個”
5、要點總結
1)Set物件的編碼可以是 intset 或者 hashtable;
2)intset 編碼的集合物件使用整數集合作為底層實現;
3)hashtable 編碼的集合物件使用字典(map)作為底層實現;
4)intset 與 hashtable 編碼之間,符合條件的情況下可以轉換。