redis设计与实现总结--整数集合

当一个集合中数量不多且只包含整数元素,redis则用整数集合来作为集合的底层实现。

 

 

typedef struct intset{
    //编码方式
    uint32_t encoding;
    //集合包含的元素数量
    uint32_t length;
    //保存元素的数组
    int8_t contents[];
}intset;
contents数组各个项按值从小到大排序。
length记录了数组的大小,其中数组的真正类型取决于encoding的值。
 
升级:当出现一个新元素类型比其他整数集合都要长时,进行升级操作,并且加到第一个或最后一个(因为是有序的)。
分三步:
1.根据新元素类型,扩展整个数组的空间大小并为新元素分配空间。
2.将当前数组中元素转换成与新元素相同的类型,并放到正确的位上。
3.将新元素添加到底层数组里面。
时间复杂度为O(n)
好处:提升整数集合的灵活性,尽可能节约内存。
没有降级的操作。
posted @ 2021-05-08 15:09  Ldler  Views(56)  Comments(0Edit  收藏  举报