Redis學習筆記 集合物件set

2021-09-24 23:04:29 字數 1975 閱讀 2186

參考:集合物件的編碼是:

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...