【Redis】跳跃表(SkipList)

引言跳表在Redis的面试中是一个经常会提起的难题,什么是SkipList?它的使用场景?它是怎样的一种数据结构?它是如何进行插入和删除数据?SkipList本身的优点和缺点?以及为什么Redis选择去使用这种数据结构来当作有序集合(Zset)的底层实现?本文将解决上述问题。SkipList的定义跳跃表(skipList)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。---《redis设计与实现》我们传统意义上的有序链表进行查询操作时的时间复杂度
摘要由CSDN通过智能技术生成

引言

跳表在Redis的面试中是一个经常会提起的难题,什么是SkipList?它的使用场景?它是怎样的一种数据结构?它是如何进行插入和删除数据?SkipList本身的优点和缺点?以及为什么Redis选择去使用这种数据结构来当作有序集合(Zset)的底层实现?本文将解决上述问题。


SkipList的定义

跳跃表(skipList)是一种有序数据结构,它通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。
---《redis设计与实现》

我们传统意义上的有序链表进行查询操作时的时间复杂度是O(N),是因为有序链表在进行查询操作时需要对链表进行遍历操作,一个个找来找到需要的索引。

那如果我们多个多个找是不是会适当减少时间复杂度呢?这就是SkipList的理念所在。
一个有序的链表,如果我们使用一半的空间来建立索引,这样虽然增加了50%的内存占用,但是性能有着极大的提升。

skipList是一个典型的“空间换时间”的数据结构设计。它相比一般的链表,有更高的查找效率,可比拟二叉查找树,平均期望的查找、插入、删除时间复杂度都是O(logn)。

由于我们这里仅讨论skipList在redis中存在的形式与意义,故不对SkipList进行过于深入的研究。


Redis中的使用场景

SkipList本身的优点虽然很多,但其实在Redis中仅有两个地方被使用:

  • 有序集合键(Zset)的底层实现。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值