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 個

 

4、要點總結

1)Set對象的編碼可以是 intset 或者 hashtable;

2)intset 編碼的集合對象使用整數集合作為底層實現;

3)hashtable 編碼的集合對象使用字典(map)作為底層實現;

4)intset 與 hashtable 編碼之間,符合條件的情況下可以轉換。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM