Redis資料結構 intset(整數集合)

2021-09-02 00:06:35 字數 1026 閱讀 6555

整數集合是redis集合鍵的底層實現之一,如果乙個集合只包含整數值元素,而且元素數量不多,redis就會用整數集合作為集合鍵的底層實現(redis集合鍵的另一種底層實現是跳表)。

一、整數集合的應用場景

跟整數集合intset相關的redis命令主要有zadd、sadd等等

二、整數集合的資料結構

typedef struct intset  intset;
各個字段具體說明如下:

1. encoding:表示整數的編碼方式,可選項為intset_enc_int16、intset_enc_int32和intset_enc_int64

2. length:集合包含的元素數量

3. contents:儲存實際元素的陣列,陣列中元素是有序的。

三、整數集合的公升級操作

step 1: 假設公升級前有3個元素1、3、10,因為這3個元素都可以用intset_enc_int16表示,所以intset的實際儲存如下,其中contents陣列占用記憶體為3*16=48bit:

step 2:此時插入乙個元素100000,因為intset_enc_int16存不下100000,而intset_enc_int32可以存下,所以需要將整數集合公升級到intset_enc_int32。公升級後intset的實際儲存如下,其中contents陣列占用記憶體為4*32=128bit:

公升級時資料遷移過程具體為:擴充套件整數集合底層陣列contents的空間大小,如上面例子中為128bit。然後先把10移到第64-95bit的位置上,再把3移到第32-63bit的位置上,再把1到第0-31bit的位置上,最後才把100000放到96-127bit的位置上(時間複雜度為o(n))。

四、整數集合的降級操作

不支援。。。浪費點空間,但影響不大。

Redis資料結構 整數集合 intset

整數集合 整數集合是集合鍵的底層實現之一,當乙個集合只包含整數值元素,並且這個集合的元素數量不多時,redis就會使用整數集合作為集合鍵的底層實現。1 整數集合實現 整數集合是redis用於儲存整數值的集合抽象資料結構,它可以可以儲存型別位int16 t int32 t int64 t的整數值,並且...

redis內部資料結構總結(7)intset

redis裡面使用intset是為了實現集合 set 這種對外的資料結構。set結構類似於數學上的集合的概念,它包含的元素無序,且不能重複。redis裡的set結構還實現了基礎的集合並 交 差的操作。與redis對外暴露的其它資料結構類似,set的底層實現,隨著元素型別是否是整型以及新增的元素的數目...

Redis資料結構

字典 dict 是redis裡最核心的資料結構,正如其全稱remote dictionary service所說,redis其實就是乙個字典服務,字典以key value的形式呈現給使用者,key是簡單的字串,而value可以是各種資料結構,比如字串 string 鍊錶 list 集合 set 排序...