Redis 的设计与实现——数据结构实现之(三)跳跃表与整数集合

跳跃表  

首先,跳跃表是一种有序的数据结构,其查找的平均复杂度为O(logN),最坏的时间复杂度为O(N),大部分情况下可以与平衡树媲美。Redis使用它作为有序集合的实现,和集群节点中作为数据结构。

跳跃表的数据结构定义如下,左边为node,右边为表:

其中左图的后退指针是用来进行反向遍历链表,而成员对性robj必须为唯一的,每个节点的层高是1-32中的随机数。

 

 

整数集合

       整数不多的时候作为集合的底层实现,其数据结构的定义如下:

各个整数元素在数组中按大小顺序排列,且没有重复项。注意contents中的元素类型取决于编码方式,而不是int8_t

升级

       何为升级?当把一个元素添加到整数集合时,如果新元素的类型比原来contents的元素类型要长时,就要先进行升级。所以添加元素的时间复杂度为O(N),而且不支持数组的降级~

  1. 根据新元素的类型在原来的contents基础上扩大容量
  2. 将旧的元素移动过去(倒着移动)
  3. 将新元素加入

这种自动升级有啥好处呢?

       首先肯定是方便,加入元素的时候无需考虑大小范围,不够了它会自己增长;其次,节约内存,只有需要的时候才用到大的整数int64~   

发布了47 篇原创文章 · 获赞 8 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/nanchengyu/article/details/89316562