參考:集合物件的編碼是:
1.1 intset編碼
intset編碼的集合物件使用整數集合作為底層實現,集合物件包含的所有元素都被儲存在整數集合裡面。
建立乙個使用intset編碼的集合物件:
redis> sadd nums 1 3 5
(integer) 3
redis> object encoding nums
"intset"
intset編碼的集合物件如下圖所示:
1.2 hashtable編碼
hashtable編碼的集合物件使用字典作為底層實現,字典的每個鍵都是乙個字串物件,每個字串物件包含了乙個集合元素,字典的值全部置為null。
建立乙個使用hashtable編碼的集合物件:
"banana"
"cherry"
(integer) 3
redis> object encoding fruits
"hashtable"
hashtable編碼的集合物件如下圖所示:
當集合物件同時滿足以下兩個條件時,物件使用intset編碼,不能滿足這兩個條件的將會使用hashtable編碼:
注:512這個閾值可以配置,可以參考配置檔案中set-max-intset-entries
選項或使用config get set-max-intset-entries
檢視、修改。
redis> config get set-max-intset-entries
1)"set-max-intset-entries"
2)"512"
redis> config set set-max-intset-entries 600
okredis> config get set-max-intset-entries
1)"set-max-intset-entries"
2)"600"
2.1 intset -> hashtable
intset編碼所需的兩個條件任意乙個不能滿足時,就會執行物件的編碼轉換,原本在整數集合中的所有元素都會被轉移儲存到字典裡,物件的編碼也會從intset變為hashtable。
(1)向集合中新增字串
示例:
redis> sadd nums 1 2 3
(integer) 3
redis> object encoding nums
"intset"
redis> sadd nums "four"
(integer) 1
redis> object encoding nums
"hashtable"
(2)集合元素超過閾值
臨時設定set-max-intset-entries
值為5
示例:
redis> config set set-max-intset-entries 5
okredis> sadd nums 1 2 3 4 5
(integer) 5
redis> scard nums
(integer) 5
redis> object encoding nums
"intset"
redis> sadd nums 6
(integer) 1
redis> scard nums
(integer) 6
redis> object encoding nums
"hashtable"
Redis學習筆記 有序集合物件zset
參考 有序集合物件的編碼是 1.1 ziplist編碼 ziplist編碼的有序集合物件使用壓縮列表作為底層實現,每個集合元素使用兩個緊挨在一起的壓縮列表節點來儲存,第乙個節點儲存元素的成員 member 第二個元素儲存元素的分值 score 壓縮列表內的集合元素按分值從小到大排序,分值較小的元素被...
redis筆記 有序集合物件
1.有序集合的編碼可以是ziplist或者skiplist 2.當使用ziplist編碼時,每個集合元素使用兩個緊挨在一起的壓縮列表節點來儲存,第乙個節點儲存元素的成員,第二個元素則儲存元素的分值 3.ziplist內的集合元素按分值從小到大進行排序,分值小的元素被放置表頭方向 4.當使用skipl...
Redis閱讀筆記 集合物件
集合物件的編碼可以是intset或hashtable。intset編碼的集合物件使用整數集合作為底層實現,集合物件包含的所有元素都被儲存再整數集合裡。舉個例子,以下 將建立如下所示的intset編碼集合物件 127.0.0.1 6379 sadd numbers 1 3 5 integer 3red...