解析Redis跳跃表执行过程(redis跳跃表执行过程)
Redis 跳跃表(Skip List) 被一些系统(例如DBMS和操作系统)用来实现数据索引以加快查询速度。他们基本上是跳跃表链表上的有序序列,它们类似于二叉搜索树,但与二叉搜索树不同,这些链表允许添加更多有序元素,而不会更改顺序。 Redis支持跳跃表方法来为其中的键和值提供排序索引。 这是用于对元素进行排序的非常有效的算法。数据结构看起来像一个“跳跃的”链表,其中每一层都是一个包含有序元素的链表。
跳跃表分为前后两个结点,每个结点都包含一个值,一些元数据以及一个指向前一个结点和下一个结点的指针(forward和back); 也以称为level的索引,在每个结点中,每个键都有一个固定结构(两个指针)
跳跃表的查询开始于头结点,当收到所需值的查询请求时,跳跃表会从结点中的值开始,然后往下跳落每层(也称为level),直到找到所需值,或者到达表尾。
下面是Redis跳跃表查询的代码实现:
//查找结点
skiplistNode *skiplistFind(skiplist *list, int value){
skiplistLevel *level;
skiplistNode *node;
//从头结点开始查询
level = list->header;
node = level->forward;
while(node != NULL){
//如果跳跃表中存在要查找的值,则返回当前结点
if (node->value == value){
return node;
}
//如果当前结点的值大于要查找的值,则往上层跳跃
if (node->value > value){
break;
}
//往下遍历,直到list尾
node = node->forward;
}
if (node != NULL) {
//返回要查找的结点,若果没有找到,则返回空
return node;
} else {
return NULL;
}
}
从上面代码可以看出,通过Redis跳跃表的查询,从头结点开始查询,然后往下层跳跃,总共遍历一遍表,直到找到所需要的值,从而实现有效快速的查询。