Redis数据结构:跳跃表

1. 跳跃表是有序集合(zset)的底层实现之一;

2. 由zskiplist和zskiplistNode组成;

3. 每个跳跃表节点的层数都是1-32之间的随机数(每创建一个节点的时候,程序会随机生成一个数[1-32]作为level数组的大小);

4. 同一个跳跃表中,多个节点可以包含相同的分值,但节点的成员对象是唯一的;

5. 按分值排序,若分值相同就按成员对象大小排序。

zskiplist数据结构

typedef struct zskiplist {
    //头节点和尾节点
    struct zskiplistNode *header, *tail;

    //节点数量
    unsigned long length;

    //表中节点最大层数
    int level;
} zskiplist;

zskiplistNode 数据结构

typedef struct zskiplistNode {
    //
    struct zskiplistLevel {
        //前进指针
        struct zskiplistNode *forward;
        //跨度
        unsigned int span;
    } level [];

    //后退指针
    struct zskiplistNode *backward;
    //分值
    double score;
    //成员对象
    robj *obj;
} zskiplistNode;

1. 前进指针(leve[i].forward)用于表头向表尾方向访问节点。

2. 跨度(level[i].span)记录两个节点之间的关系。

3. 后退指针(backward)用于表尾向表头方向访问节点,每次只能后退一个节点。

4. 分值(score),表中的节点按分值大小排序。

5. 成员对象(obj)是一个指针,指向一个SDS对象。

 

转载于:https://www.cnblogs.com/wwzyy/p/10628199.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis在底层使用了多种数据结构,包括链表、字典和跳跃表。链表是Redis自己构建的数据结构,因为C语言并没有内置链表结构。链表在Redis中被广泛应用,用于实现列表等数据类型。字典用于实现Redis中的键值对存储结构,它能够通过键快速地查找对应的值。跳跃表是一种用于有序集合键和集群节点内部数据结构数据结构,它能够提供较快的查找和插入操作。除了这些数据结构Redis还使用redisObject来表示这些数据结构的底层实现,redisObject有三个重要的属性,分别是type、encoding、ptr。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Redis的六种底层数据结构](https://blog.csdn.net/A12115419/article/details/122198783)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [redis数据结构的底层实现](https://blog.csdn.net/qq_43216019/article/details/129225687)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值