Redis数据结构——跳跃表

跳跃表是Redis有序集合的底层实现之一,由zskiplist和zskiplistNode组成。节点按照分值排序,分值相同则按对象排序。每个节点包含多个level指针,用于快速访问。创建时,level大小随机生成,介于1和32之间。跳跃表提供高效查找能力,支持有序数据的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

跳跃表是一种有序数据结构,通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表时Redis的有序集合的底层实现之一。

1.跳跃表的数据结构

跳跃表节点:其中的level数组可以包含多个元素,每个元素都包含一个指向其他节点的指针,通过这些层来达到快速访问其他节点的目的。每次创建一个新的跳跃表节点时,会随机生成一个介于1和32之间的整数值作为level数组的大小。

typedef struct zskiplistNode {
    robj *obj;  // 对象
    double score;  // 分值
    struct zskiplistNode *backward;  // 后退指针
    struct zskiplistLevel {
        struct zskiplistNode *forward;  // 前进指针
        unsigned int span;  // 这个层跨越的节点数量
    } level[];
} zskiplistNode;

 跳跃表:多个跳跃表节点可以组成一个跳跃表

typedef struct zskiplist {
    struct zskiplistNode *header, *tail;  // 头、尾节点
    unsigned long length;  // 节点数量
    int level;  // 目前表内节点的最大层数
} zskiplist;

2.小结

  • Redis的跳跃表由zskiplist和zskiplistNode组成,其中zskiplist用于保存跳跃表的信息,包括表头节点、表尾节点、表的长度,zskiplistNode用于保存每个跳跃表节点的信息,包括分值、对象。
  • 跳跃表中的节点按照分值进行排序,当分值相同时,按照成员对象的大小进行排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值