【redis学习笔记-01-基础篇】-05-跳跃列表

上图所示跳跃列表存储示意图

每一个节点就是上图所示的每一列。可以看到每一列的高度不一样,这正是跳跃列表的不同之处。

每个节点存储的数据是kv结构,分别存储了数据value和对应的分数score。节点的高度是该节点的层级属性。通过随机算法,节点在创建时会被设置成相应的层级level高度。图中只演示了4层,但其实redis中的跳跃列表的最大层级并不止此所示。

列表中的数据按score从小到大,依次从左往右排列。若此时需要获取指定分数节点,即上图红标所指。

查找示例

如下:

  1. 跳跃列表从head头节点的最高层level开始,此时为level4,查找level4箭头所指下一节点,即找到节点7。
  2. 查询节点7score大于目标score。则往下level查找。即head节点此时查找level3对应下一节点,即找到节点2。
  3. 查询节点2score小于目标score。则从节点2的level3箭头查找下一节点。同样找到节点7。再次判断大于目标score。
  4. 节点2往下降低level。到level2箭头所指下一节点,找到节点5。
  5. 查询节点5score小于目标score。则从节点5的level2开始查找。同样检验节点7。
  6. 节点5往下降低level。到level1箭头所指下一节点。找到节点6。
  7. 此时找到目标节点。通过查询路径上的rank相加得到当前节点rank为2+3+1=6。

 

更新示例

  1. 新建节点
  2. 查询插入位置
  3. 插入节点,更新向后向前节点指针

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值