redis 原理 資料結構 整數集合 五

2022-06-29 13:27:09 字數 1244 閱讀 9011

集合鍵的底層(intset)實現之一,當乙個集合只包含數值,並且數值的元素並不多時,就會選擇使用整數集合作為底層實現,

本地:0>sadd number 1 2 5 6

4本地:0>object encoding number

intset

注:雖然contens型別為int_8但是真正儲存的儲存的型別取決於encoding的值

如果length是4 encoding長度是int64 則整個陣列占用4*64=256(size)

int_16  範圍:-32786~32767

int_32 範圍:-2147483648~2147483647

int_64 範圍:-9223372036854775808~9223372036854775807

注:因為新增元素都有可能產生公升級所以複雜度是0(n)

如果將乙個新元素加入到集合,並且這個元素型別的長度比集合所有型別都要長時就會觸發公升級

比如集合包含int16的元素1,2,3,因為沒有元素佔16位,所以三個元素佔3*16=48位空間

現在將int32位65535新增到集合,觸發公升級

1.首先根據新的元素型別占用長度對底層陣列進行重新分配加上新的元素一共是4個元素,所需空間是4*32=128

2.因為新的元素占用的還是前48位所以要將這3個元素放到正確的位上

3.然後將新的元素放到新分配的空間上(注意整數集合是有序的,如果插入的是2 則會將原有的3後移動)

4.最後將encoding的型別改為int32

1.節約記憶體,不需要直接使用int64,而是按需公升級

2.提高靈活性,因為我們一般通過宣告不同型別的陣列型別 比如int32 儲存32位 int64儲存64,通過公升級無須關係多少位自動公升級適配

不支援降級

Redis資料結構 整數集合

最新 redis記憶體 三個重要的緩衝區 最新 redis記憶體 記憶體消耗 記憶體都去哪了?最新 redis持久化 如何選擇合適的持久化方式 最新 redis持久化 aof日誌 整數集合 intset 並不是乙個基礎的資料結構,而是redis自己設計的一種儲存結構,是集合鍵的底層實現之一,當乙個集...

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

整數集合是redis集合鍵的底層實現之一,如果乙個集合只包含整數值元素,而且元素數量不多,redis就會用整數集合作為集合鍵的底層實現 redis集合鍵的另一種底層實現是跳表 一 整數集合的應用場景 跟整數集合intset相關的redis命令主要有zadd sadd等等 二 整數集合的資料結構 ty...

Redis資料結構 整數集合 intset

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