跳表:为什么Redis一定要用跳表来实现有序集合?

跳表:为什么Redis一定要用跳表来实现有序集合,而不是红黑树?
  • Redis种的有序集合是通过跳表来实现的,严格点讲,其实还用到了散列表。Redis有序集合支持的核心操作如下:

    • 插入一个数据
    • 删除一个数据
    • 查找一个数据
    • 按照区间查找数据
    • 迭代输出有序序列
    • 其中,插入、删除、查找以及迭代输出有序序列这几个操作,红黑树也能完成,时间复杂度都是O(logn)。但是按照区间来查找数据这个操作,红黑树的效率没有跳表高。
    • 对于按照区间来查找数据这个操作,跳表可以做到O(logn)的时间复杂度定位区间的起点,然后在原始链表中往后遍历就可以了。
  • 当然,Redis 之所以用跳表来实现有序集合,还有其他原因,比如,跳表代码更容易实现,比红黑树好懂、好写多了,而简单就意味着可读性好,不容易出错。跳表更加灵活,它可以通过改变索引构建策略,有效平衡执行效率和内存消耗。

  • 不过,跳表也完全不能替代红黑树。因为红黑树比跳表出现的早,很多编程语言中的Map类型都是通过红黑树来是实现的。

  • 跳表是一种动态数据结构、支持快读地插入、删除、查找操作,时间复杂度都是O(logn)

分类:
后端
标签: