1. 程式人生 > 其它 >Redis - set底層資料結構

Redis - set底層資料結構

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 編碼之間,符合條件的情況下可以轉換。