Redis設計與實現 整數集合intset

2021-09-10 05:29:59 字數 896 閱讀 5616

整數集合是集合鍵的底層實現之一。

特點:1、有序   2、無重複  3、支援公升級,不支援降級

typedef struct intsetintset;
contents陣列是整數集合的底層實現:整數集合的每個元素都是contents陣列的乙個陣列項(item),各個項在陣列中按值的大小從小到大有序的排列,並且陣列中不包含任何重複項。

length屬性記錄了整數集合包含的元素數量,即contents陣列的長度。

雖然intset結構將contents屬性宣告為int8_t型別的陣列,但實際上contents陣列並不儲存任何int8_t型別的值,contents陣列的真正型別取決於encoding屬性的值。

1)根據新元素的型別,擴充套件整數集合底層陣列的空間大小,並為新元素分配空間。

2)將底層陣列現有的所有元素都轉換成與新元素相同的型別,並將型別轉換後的元素放置到正確的位上,而且在放置元素的過程中,需要維持陣列的有序性質不變。

3)將新元素新增到底層陣列裡面。

注:因為引發公升級的新元素的長度總是比整數集合現有所有元素的長度都大,所以這個新元素的值要麼就大於所有現有元素,要麼就小於所有現有元素。即新元素會放在索引0或者length-1的位置。

公升級好處:1、提公升整數集合的靈活性   2、盡可能的節約記憶體

Redis 整數集合

整數集合時集合鍵的底層實現之一,適用於只包含整數值,且數量不多的使用場景。可用於儲存int16 t,int32 t,int64 t的整數值。整數集合公升級 整數集合在儲存數值時,如果新的元素長度比久的大,那需要公升級。步驟如下 根據新元素的型別,擴充套件整數集合底層陣列空間大小,為新元素分配空間。將...

Redis之整數集合

整數集合是集合鍵的底層實現之一,當乙個結合只包含整數值元素,並且這個集合的元素數量不多時,redis就會使用整數集合作為集合作為集合鍵的底層實現。我們先來看一下它的結構 typedef struct intset intse它可以儲存的型別為int16 t int 32t int64 t,並且保證集...

Redis的整數集合

整數集合是集合鍵的底層實現之一,是redis用於儲存整數值的集合抽象資料結構,可以儲存的型別為int16 t int32 t int64 t,並保證集合中不會出現重複元素 typedef struct intset intset 將乙個新元素加到整數集合,如果新元素的型別比整數集合現有所有元素的型別...