redis设计与实现总结--整数集合
作者:互联网
当一个集合中数量不多且只包含整数元素,redis则用整数集合来作为集合的底层实现。
typedef struct intset{ //编码方式 uint32_t encoding; //集合包含的元素数量 uint32_t length; //保存元素的数组 int8_t contents[]; }intset;contents数组各个项按值从小到大排序。 length记录了数组的大小,其中数组的真正类型取决于encoding的值。 升级:当出现一个新元素类型比其他整数集合都要长时,进行升级操作,并且加到第一个或最后一个(因为是有序的)。 分三步: 1.根据新元素类型,扩展整个数组的空间大小并为新元素分配空间。 2.将当前数组中元素转换成与新元素相同的类型,并放到正确的位上。 3.将新元素添加到底层数组里面。 时间复杂度为O(n) 好处:提升整数集合的灵活性,尽可能节约内存。 没有降级的操作。
标签:encoding,--,元素,redis,整数,数组,集合,新元素 来源: https://www.cnblogs.com/2462478392Lee/p/14745017.html