Redis 源码学习笔记( 四 )


跳表的删除
在各个层中找到包含 x 的节点,使用标准的from list 方法删除该节点 。
例子:删除 71
集合 整数集合
当一个集合只包含整数值元素,并且这个集合的元素不多时,Redis 就会使用整数集合作为集合键的底层实现 。
typedef struct intset {// 保存元素所使用的类型的长度uint32_t encoding;// 元素个数uint32_t length;// 保存元素的数组int8_t contents[];} intset;
数组的类型声明比较容易让人误解,实际上,并不使用类型来保存任何元素,结构中的这个类型声明只是作为一个占位符使用:在对中的元素进行读取或者写入时,程序并不是直接使用来对元素进行索引,而是根据的值,对进行类型转换和指针运算,计算出元素在内存中的正确位置 。在添加新元素,进行内存分配时,分配的空间也是由的值决定 。
升级
如果添加一个值,并且新元素类型比现有类型都要长时,整数集合需要升级,如以前编码为添加一个的数据,那么整数集合需要升级
升级步骤
根据新元素类型,扩展整数集合底层数组的空间大小,并为新元素分配空间 。将底层数组现有的所有元素都转换成与新元素相同的类型,并将转换后的元素放置到正确的位上,而且需要保持有序性将新元素加入底层数组里面
降级
整数集合不支持降级