Redis-为什么使用跳表?


为什么有可比性

它们都是用于解决数据集合的查找问题,即根据指定的key,快速查到它所在的位置或者对应的value。

Redis用跳表不用B+树的原因

redis是内存数据库,儿B+树是为了mysql这种io数据库准备的。B+树每个节点的数量都是一个mysql分区页的大小。

数据结构对比

数据结构 实现原理 查询方式 查找 存储 插入删除
Hash 哈希表 单key O(1) 除数据外没有额外存储 O(1)
B+树 平衡二叉树扩展而来 单key,范围,分页 O(logn) 数据,左右指针,页节点指针 O(logn)
跳表 有序链表扩展而来 单key,分页 O(logn) 数据,指针,每个节点指针<2,所以占用空间比B+树小 O(logn)

redis SortedSet底层数据结构

 zset底层的存储结构包括ziplist或skiplist,在同时满足以下两个条件的时候使用ziplist,其他时候使用skiplist,两个条件如下:

  • 有序集合保存的元素数量小于128个
  • 有序集合保存的所有元素的长度小于64字节

 当ziplist作为zset的底层存储结构时候,每个集合元素使用两个紧挨在一起的压缩列表节点来保存,第一个节点保存元素的成员,第二个元素保存元素的分值。

 当skiplist作为zset的底层存储结构的时候,使用skiplist按序保存元素及分值,使用dict来保存元素和分值的映射关系。


  目录