背景
因为redis中的有序列表的查询时间复杂度是O(n),并且跳跃表支持平均O(logn)和最坏O(N)的时间复杂度的节点查找,并且在大部分情况下,跳表的查询效率可以和平衡树媲美,并且跳表的实现比平衡树要来的更加简单。
使用场景是在zset的redis数据结构,因为zset需要根据score进行排序, zset保证顺序性的排序如下:
应用:
上文中的图是zset的结构,是同时保存在了字典和跳跃列表中的值。但是在zset的实际设计过程中会共享元素的成员和分值,因此不会造成内存的浪费。
使用跳跃表的目的是为了范围查找,zrang zrange 减少时间复杂度,以及额外的o(n)的内存空间。 使用字典是为了能够保障根据成员查找分值这个复杂度降为o(1)。