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

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


你可能感兴趣的:(redis,skiplist,redis源码,跳表)