Redis 2.8.9源码 - 跳表操作 操作函数头整理,并注释作用和参数说明
博客专区 > logbird 的博客 > 博客详情
Redis 2.8.9源码 - 跳表操作 操作函数头整理,并注释作用和参数说明
logbird 发表于3年前
Redis 2.8.9源码 - 跳表操作 操作函数头整理,并注释作用和参数说明
  • 发表于 3年前
  • 阅读 93
  • 收藏 1
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: Redis 2.8.9源码 - 跳表操作 操作函数头整理,并注释作用和参数说明,用于实现Redis zset类型的数据结构

本文为作者原创,转载请注明出处:http://my.oschina.net/fuckphp/blog/280155

/**
 * 创建一个 跳表 节点
 * int level 跳表节点的层高(根据层高决定分配多少内存)
 * double score 分值
 * robj *obj key的对象
 * return 返回 创建好的跳表节点
 */
zskiplistNode *zslCreateNode(int level, double score, robj *obj);


/**
 * 创建一个 跳表,并生成 ZSKIPLIST_MAXLEVEL 长度的头节点
 * return 返回 创建好的跳表
 */
zskiplist *zslCreate(void);


/**
 * 释放一个跳表节点 并将 跳表节点key对象的引用计数 减1 
 * zskiplistNode *node 需要释放的节点指针
 * return void
 */
void zslFreeNode(zskiplistNode *node);


/**
 * 遍历跳表释放每一个节点 然后释放跳表
 * zskiplist *zsl 要伸出的跳表指针
 * return void
 */
 void zslFree(zskiplist *zsl);


/**
 * 随机产生一个层高 每次循环 有 ZSKIPLIST_P 的几率增高一
 * return 返回 返回层高
 */
int zslRandomLevel(void);


/**
 * 向跳表中插入一个跳表节点,从高层开始遍历 如果分相同 则比较key对象
 * zskiplist *zsl 跳表对象
 * double score 分值
 * robj *obj key的对象
 * return 返回 创建好的跳表节点
 */
zskiplistNode *zslInsert(zskiplist *zsl, double score, robj *obj);


/**
 * 在 跳表中 删除一个节点
 * zskiplist *zsl 跳表对象
 * double score 要删除的节点
 * zskiplistNode **update 每一层指向要删除的节点的指针数组
 * return void
 */
void zslDeleteNode(zskiplist *zsl, zskiplistNode *x, zskiplistNode **update);


/**
 * 根据分 和 key对象 来删除指定节点
 * zskiplist *zsl 跳表对象
 * double score 分值
 * robj *obj key的对象
 * return 返回 成功返回1 否则返回0
 */
int zslDelete(zskiplist *zsl, double score, robj *obj);


共有 人打赏支持
logbird
粉丝 41
博文 41
码字总数 40802
作品 3
×
logbird
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: