文档章节

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

logbird
 logbird
发布于 2014/06/16 14:04
字数 440
阅读 126
收藏 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

粉丝 48
博文 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 2.8.9源码 - 双向链表操作函数头整理,并注释作用和参数说明(附测试方法和代码)

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

logbird
2014/05/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

基于TP5的微信的公众号获取登录用户信息

之前讲过微信的公众号自动登录的菜单配置,这次记录一下在TP5项目中获取自动登录的用户信息并存到数据库的操作 基本的流程为:微信设置自动登录的菜单—>访问的URL指定的函数里获取用户信息—...

月夜中徘徊
54分钟前
0
0
youTrack

package jetbrains.teamsys.license.runtime; 计算lis package jetbrains.ring.license.reader; 验证lis 安装后先不要生成lis,要把相关文件进行替换 ring-license-checker-1.0.41.jar char......

max佩恩
57分钟前
0
0
12.17 Nginx负载均衡

Nginx负载均衡 下面的dig看到可以返回2个IP,就是解析出来的IP,这样我们可以做负载均衡。 dig www.qq.com 1.vim /usr/local/nginx/conf/vhost/fuzai.conf 2.添加如下配置 upstream qq //定义...

芬野de博客
今天
0
0
SSE(Server Send Event 服务端发送事件)

package com.example.demo.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframe......

Canaan_
今天
0
0
jvm调优

1.jvm运行模式 client模式:启动快,占用内存少,jit编译器生成代码的速度也更快. server模式:主要优势在于代码优化功能,这个功能对于服务器应用而言尤其重要. tiered server模式:结合了client与...

Funcy1122
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部