redis的跳表

csharp 复制代码
typedef struct zskiplistNode {
    // 分值
    double score;
    // 成员对象
    robj *obj;
    // 后退指针
    struct zskiplistNode *backward;
    // 层
    struct zskiplistLevel {
        // 前进指针
        struct zskiplistNode *forward;
        // 跨度
        unsigned int span;
    } level[];
} zskiplistNode;

跳表的节点查找算法可以描述如下:

从跳表的头节点开始。

在当前层级上,从最右侧开始,逐个比较节点的值,直到找到一个节点的值大于或等于目标值。

如果当前节点的值等于目标值,则返回该节点,查找结束。

如果当前节点的值大于目标值,则向下移动到下一层级。

重复步骤2和3,直到找到目标节点或者到达跳表的底层。

跳表的插入算法描述如下:

随机生成层数。

插入新节点时,需要在每一层都更新对应的指针,使得新节点能够正确地插入到每一层中。

相关推荐
资生算法程序员_畅想家_剑魔16 小时前
Mysql常见报错解决分享-01-Invalid escape character in string.
数据库·mysql
冰冰菜的扣jio16 小时前
Redis缓存中三大问题——穿透、击穿、雪崩
java·redis·缓存
PyHaVolask17 小时前
SQL注入漏洞原理
数据库·sql
ptc学习者17 小时前
黑格尔时代后崩解的辩证法
数据库
代码游侠17 小时前
应用——智能配电箱监控系统
linux·服务器·数据库·笔记·算法·sqlite
阿里巴巴P8资深技术专家17 小时前
基于 Spring AI 和 Redis 向量库的智能对话系统实践
人工智能·redis·spring
!chen17 小时前
EF Core自定义映射PostgreSQL原生函数
数据库·postgresql
霖霖总总17 小时前
[小技巧14]MySQL 8.0 系统变量设置全解析:SET GLOBAL、SET PERSIST 与 SET PERSIST_ONLY 的区别与应用
数据库·mysql
马克学长17 小时前
SSM校园食堂订餐系统531p9(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm 框架·ssm 校园食堂订餐系统
alonewolf_9917 小时前
深入剖析MySQL索引底层:B+树、联合索引与跳跃扫描原理全解
数据库·b树·mysql