文档章节

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

logbird
 logbird
发布于 2014/06/16 14:04
字数 440
阅读 124
收藏 1
点赞 0
评论 0

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

粉丝 48
博文 40
码字总数 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 ⋅ 1

Redis 2.8.9源码 - Redis中的双端链表实现 adlist

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

logbird ⋅ 2014/05/27 ⋅ 0

Redis 2.8.9源码 - Redis中的字符串实现 sds

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

logbird ⋅ 2014/05/26 ⋅ 3

带有详细注释的 Redis 3.0 代码 (github.com)

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

nothingfinal ⋅ 2016/06/06 ⋅ 0

Redis 2.8.9源码 - 双向链表操作函数头整理,并注释作用和参数说明(附测试方法和代码)

本文为作者原创,转载请注明出处:http://my.oschina.net/fuckphp/blog/269685 如果需要对函数进行测试可以在源代码(src/adlist.c)下面加入以下代码,然后在main中加入你的测试代码: #ifdef...

logbird ⋅ 2014/05/27 ⋅ 0

【Redis源码剖析】 - Redis数据类型之有序集合zset

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

xiejingfa ⋅ 2016/04/24 ⋅ 0

Redis 源码分析:dict.c 和 dict.h

简介 哈希表是 redis 的核心结构之一,在 redis 的源码中, dict.c 和 dict.h 就定义了 redis 所使用的哈希结构,在这篇文章中,我们将对 dict.c 和 dict.h 进行注解和分析,籍此加深对 redi...

虫虫 ⋅ 2012/03/18 ⋅ 2

构建高性能数据库缓存之Redis(一)

一、Redis概述 1、1 什么是redis Redis是一个开源的用ANSI C编写、支持网络、基于内存、亦可持久化的日志型、Key-Value数据库,根据DB-Engines.com站点月度排行的数据显示,Reidis是最流行的...

晨风微凉 ⋅ 2014/06/06 ⋅ 0

redis源码分析之有序集SortedSet

有序集SortedSet算是redis中一个很有特色的数据结构,通过这篇文章来总结一下这块知识点。 一、有序集SortedSet命令简介 redis中的有序集,允许用户使用指定值对放进去的元素进行排序,并且基...

凌风郎少 ⋅ 2017/11/19 ⋅ 0

【Redis源码剖析】 - Redis数据类型之列表List

原创作品,转载请标明:http://blog.csdn.net/Xiejingfa/article/details/51166709 Redis源码剖析系列文章汇总:传送门 今天为大家带来Redis五大数据类型之一 – List的源码分析。 Redis中的...

xiejingfa ⋅ 2016/04/16 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

2018上海云栖大会workshop-日志数据采集与分析对接

摘要: 日志数据采集与分析对接 课程描述 通过日志服务采集用户、数据库、业务等访问数据。演示对于业务日志分析与处理,程序日志查询与监控,打通日志与数据仓库对接案例。 日志种类 网站访...

猫耳m ⋅ 31分钟前 ⋅ 0

SpringMVC中的ContentNegotiatingViewResolver配置

pom.xml <properties><commons-lang.version>2.6</commons-lang.version><slf4j.version>1.7.6</slf4j.version><spring.version>4.1.3.RELEASE</spring.version> <jack......

颖伙虫 ⋅ 33分钟前 ⋅ 0

Spring Boot 2.0正式发布,升还是不升呢?

Spring几乎是每一位Java开发人员都耳熟能详的开发框架,不论您是一名初出茅庐的程序员还是经验丰富的老司机,都会对其有一定的了解或使用经验。在现代企业级应用架构中,Spring技术栈几乎成为...

java高级架构牛人 ⋅ 34分钟前 ⋅ 0

打包时隐藏打印日志

1.打包时不允许项目中有打印的日志,可以在pch中加入下面这段代码即可 #ifdef DEBUG# define Log(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA...

小黑202 ⋅ 35分钟前 ⋅ 0

SSL双向认证的实现

环境 系统:archlinux/centOS nginx:nginx/1.12.2 浏览器:火狐firefox 前提:1.安装nginx。    2.安装openssl。 生成证书 新建工作目录  首先建立一个工作目录,这里以我的工作目录为例...

颖辉小居 ⋅ 41分钟前 ⋅ 0

vscode 代码格式化,语法检查插件ESLint+Prettier

ESLint+Prettier prettier只关注格式化 ,插件prettier-vscode,编辑器的配置setting.json会出现prettier插件的相关配置节点,同时也能看到一些默认的配置信息。 安装成功后,编辑器默认的格式...

momo1987 ⋅ 43分钟前 ⋅ 0

使用TinyProxy搭建代理服务器

什么是TinyProxy 它是一个代理服务器,用来实现http或https代理,windows系统一直在用ccproxy, 非windows系统,怎么开放个http代理呢?那就是TinyProxy。 安装 直接执行命令即可 sudo apt-g...

bengozhong ⋅ 44分钟前 ⋅ 0

掌握需求过程

1,需求必须可度量、可测试 2,需求是什么? 功能需求 非功能需求 限制条件 3,Volere需求过程 采用Volere需求过程,最好采用RUP,增量,迭代,螺旋,Scrum或其他类似的迭代式开发过程 (注意...

霜叶情 ⋅ 48分钟前 ⋅ 0

分布式微服务云架构开发Web应用

举一个简单的例子,在快速入门工程的基础上,举一个简单的示例来通过Thymeleaf渲染一个页面。 @Controller public class HelloController { @RequestMapping("/") pub...

明理萝 ⋅ 49分钟前 ⋅ 0

图应用之关键路径(Critical Path)

之前我们介绍过,在一个工程中我们关心两个问题: (1)工程是否顺利进行 (2)整个工程最短时间。 之前我们优先关心的是顶点(AOV),同样我们也可以优先关心边(同理有AOE)。(Activity ...

临江仙卜算子 ⋅ 51分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部