文档章节

Redis 2.8.9源码 - 跳表操作 操作函数头整理,并注释作用和参数说明

logbird
 logbird
发布于 2014/06/16 14:04
字数 440
阅读 127
收藏 1

本文为作者原创,转载请注明出处: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

logbird

粉丝 50
博文 43
码字总数 37949
作品 3
朝阳
高级程序员
Redis 2.8.9源码 - 跳表的实现

本文为作者原创,转载请注明出处:http://my.oschina.net/fuckphp/blog/280168 本文代码可以在 src/redis.h 和 src/tzset.c 两个文件中找到,关于跳表相关的api请参考另外一篇文章 Redis 2....

logbird
2014/06/16
0
1
Redis 2.8.9源码 - Redis中的双端链表实现 adlist

本文为作者原创,转载请注明出处:http://my.oschina.net/fuckphp/blog/269801 adlist作为Redis中的双端链表,在Redis中被广泛的应用到了很多地方,比如 slowlog的存储,主从复制中报错客户端...

logbird
2014/05/27
0
0
Redis 2.8.9源码 - Redis中的字符串实现 sds

本文为作者原创,转载请注明出处:http://my.oschina.net/fuckphp/blog/269167 在C中子字符串的实现都是用 char *来实现的,用起来很不方便,而且容易出现内存泄露,并且效率不高,在Redis内...

logbird
2014/05/26
0
3
带有详细注释的 Redis 3.0 代码 (github.com)

 Redis 3.0 源码注释 本项目是注释版的 Redis 3.0 源码, 原始代码来自: https://github.com/antirez/redis 。 这份注释是我在创作新版《Redis 设计与实现》期间, 为了了解 Redis 的内...

nothingfinal
2016/06/06
0
0
【Redis源码剖析】 - Redis数据类型之有序集合zset

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51231967 Redis源码剖析系列文章汇总:传送门 这周事情比较多,原本计划每周写两篇文章的任务看来是完不成了。今天为...

xiejingfa
2016/04/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
14
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
1
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部