整數集合是集合鍵的底層實現之一,當乙個集合只包含整數值元素,並且這個集合的元素數量不多,redis會使用整數集合作為集合的底層實現
typedef struct intset
整數集合可以儲存的值有int16,int32,int64
如果編碼方式為intset_enc_int16,contents陣列為16*5=80位/8 = 10
每當要把乙個新元素加入集合,並且新元素型別比整數集合現有所有元素的型別都要長,整數集合需要先進行公升級,然後才能將新元素新增到整數集合裡面
公升級分為三步
根據新元素擴充套件整數集合底層陣列空間大小,並為新元素分配空間
將底層陣列現有的所有元素都轉換成新元素相同的型別,並將型別轉換後的元素放置到正確的位上,放置過程中需要保持原有的次序不變
將新元素新增進底層陣列中
所以插入乙個元素的時間複雜度是o(n)
提示靈活性
c語音是靜態型別,陣列只能儲存同一型別的元素,公升級便於操作,不用擔心型別錯誤
節約記憶體
如果想乙個陣列同時保持16,32,64位整數,底層陣列需要是64位的,這樣將會增大記憶體消耗,只有在集合中新增了64位整數才會公升級至64位底層陣列,再次之前都是可以節約記憶體的
redis 資料結構與物件
簡單說下redis的資料結構,這些在網上也都有很詳細的解釋,redis 設計與實現 這本書基於redis3.0的,但是現在已經5.0 了,所以有些資料結構發生了變化,其中我自己實現發現了一部分,可能還有沒發現的。慢慢實踐吧 簡單動態字串是在c語音傳統的字串基礎上構建的,其資料結構為 struct s...
Redis資料結構與物件
redis使用五種型別物件實現實現鍵值對資料庫 字串 列表 雜湊 集合 有序集合 列表編碼 ziplist或linkedlist 雜湊編碼 ziplist或hashtable 集合編碼 intset或hashtable 有序集合編碼 ziplist或skiplist struct sdshdr 二進...
Redis資料結構與物件(二)
1 物件共享 如果redis中已經set了乙個字串或數字,再set同樣值,這時會實現物件引用共享。值物件的refcount會出現變化,增加。redis set a 100 ok redis set b 100 redis object refcount a integer 2 object refc...