Redis 資料結構與物件 整數集合

2021-09-09 07:59:40 字數 620 閱讀 3129

整數集合是集合鍵的底層實現之一,當乙個集合只包含整數值元素,並且這個集合的元素數量不多,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...