整數(shù)集合是集合鍵的底層實現(xiàn)之一,當一個集合只包含整數(shù)值元素,并且這個集合的元素數(shù)量不多時,Redis就會使用整數(shù)集合作為集合鍵的底層實現(xiàn)。
6.1 整數(shù)集合的實現(xiàn)

contents數(shù)組是整數(shù)集合的底層實現(xiàn):整數(shù)集合的每個元素都是contents數(shù)組的一個數(shù)組項,各個項在數(shù)組中按值的大小從小到大有序地排列,并且數(shù)組中不包含任何重復項。
length屬性記錄了整數(shù)集合包含的元素數(shù)量,也即是contents的數(shù)組長度
contents數(shù)組的真正類型取決于encoding屬性的值
6.2 升級
每當我們要將一個新元素添加到整數(shù)集合里面,并且新元素的類型比整數(shù)集合現(xiàn)有所有元素的類型都要長時,整數(shù)集合需要先進行升級,然后才能將新元素添加到整數(shù)集合里面。
升級整數(shù)集合病添加新元素供分為三步進行:
1)根據(jù)新元素的類型,擴展整數(shù)集合底層數(shù)組的空間大小,并為新元素分配空間
2)將底層數(shù)組現(xiàn)有的所有元素都轉(zhuǎn)換成與新元素相同的類型,并將類型轉(zhuǎn)換后的元素放到正確的位置上,而且在放置元素的過程中,需要繼續(xù)維持底層數(shù)組的有序性質(zhì)不變。
3)將新元素添加到底層數(shù)組里面。
因為每次向整數(shù)集合添加新元素都可能會引起升級,而每次升級都需要對底層數(shù)組中已有的元素進行類型轉(zhuǎn)換,所以向整數(shù)集合添加新元素的時間復雜度為O(N)
6.3 升級的好處
1.提升整數(shù)集合的靈活性
2.盡可能地節(jié)約空間
6.4 降級
整數(shù)集合不支持降級操作,一旦對數(shù)組進行了升級,編碼就會一直保持升級后的狀態(tài)