整數集合是集合鍵的底層實現之一。
整數集合(intset)是redis用於儲存整數值的集合抽象資料結構,可以儲存型別為int16_t,int32_t或者int64_t的整數值,並且保證集合中不會出現重複元素。
contents陣列是整數集合的底層實現:證書集合的每個元素都是contents陣列乙個陣列項(item),各個項在陣列中按值的大小從小到大有序地排列,並且陣列中不包含任何重複項。
length屬性記錄了整數集合包含的元素數量,即contents陣列的長度。
雖然intset結構將contents屬性宣告為int8_t型別的陣列,但實際上contents陣列不儲存任何int8_t型別的值,contents陣列的真正型別取決與encoding屬性的值:
每當將乙個新元素新增到整數集合裡面,並且新元素的型別比整數集合現有所有元素型別都要長時,整數集合需要先進行公升級,然後才能將新元素新增到整數集合裡面。
公升級整數集合並新增新元素共分為三步:
1)根據新元素的型別,擴充套件整數集合底層陣列的空間大小,並為新元素分配空間。
2)將底層陣列現有元素都轉換成與新元素相同的型別,並將型別轉換後的元素放置到正確的位上,而且在放置元素的過程中,需要繼續維持底層陣列的有序性質不變。
3)將新元素新增到底層陣列裡面。
整數集合的公升級策略有兩個好處:提公升整數集合的靈活性;盡可能地節約記憶體。
整數集合可以通過自動公升級底層陣列來適應新元素,所以我們可以隨意地將int16_t,int32_t或者int64_t型別的整數新增到集合中,而不必擔心出現型別錯誤。
整數集合的做法既可以讓集合能同時儲存三種不同型別的值,又可以確保公升級操作只會在有需要的時候進行,這可以盡量節省記憶體。
整數集合不支援降級操作。
Redis底層資料結構 整數集合
redis 中的整數集合 intset 是用來儲存多個不重複的整數值且有序的集合抽象資料結構,可以儲存型別為 int16 t int32 t 或者 int64 t 的整數值。整數集合在 redis 中作為了集合 set 資料結構的底層實現之一。當乙個集合中的元素都是整數值,且元素不多的時候,整數集合...
Redis底層資料結構?
福哥口訣法 簡鏈字跳整 壓快壓 sds synamic string 簡單動態字串。支援自動動態擴容的位元組陣列 list 鍊錶 雙端鍊錶。dict 字典。使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 跳躍表。附加了後向指標的跳躍表 intset 整數集合。用於儲存整數數值集合的自有結...
Redis底層資料結構
redis底層實現的8種資料結構 sds synamic string 支援自動動態擴容的位元組陣列 list 鍊錶 dict 使用雙雜湊表實現的,支援平滑擴容的字典 zskiplist 附加了後向指標的跳躍表 intset 用於儲存整數數值集合的自有結構 ziplist 一種實現上類似於tlv,但...