- 博客(5)
- 资源 (1)
- 收藏
- 关注
原创 Redis源码解析:05跳跃表
一:基本概念 跳跃表是一种随机化的数据结构,在查找、插入和删除这些字典操作上,其效率可比拟于平衡二叉树(如红黑树),大多数操作只需要O(log n)平均时间,但它的代码以及原理更简单。跳跃表的定义如下: “Skip lists are data structures that use probabilistic balancing rather than
2016-01-31 08:46:18 2502
原创 Redis源码解析:04字典的遍历dictScan
dict.c中的dictScan函数,用来遍历字典,迭代其中的每个元素。该函数使用的算法非常精妙!!!所以必须记录一下。 遍历一个稳定的字典,当然不是什么难事,但Redis中的字典因为有rehash的过程,使字典可能扩展,也可能缩小。这就带来了问题,如果在两次遍历中间,字典的结构发生了变化(扩展或缩小),字典中的元素所在的位置相应的会发生变化,那如何保证字典中原有的元素都可以被
2016-01-17 20:46:59 3754 6
原创 Redis源码解析:03字典
字典是一种用于保存键值对(keyvalue pair)的抽象数据结构。在字典中,一个键和一个值进行关联,就是所谓的键值对。字典中的每个键都是独一无二的,可以根据键查找、更新值,或者删除整个键值对等等。 字典在Redis中的应用相当广泛,如Redis的数据库就是使用字典来作为底层实现的,对数据库的增、删、查、改操作也是构建在对字典的操作之上的。比如下面的命令:redis> SE
2016-01-17 20:29:48 965
原创 翻转整数的二进制位
一个无符号的整数,如果需要翻转其二进制位,可以采用下面的方法,以32位整数为例:unsigned int v; // 32-bit word to reverse bit order// swap odd and even bitsv = ((v >> 1) & 0x55555555) | ((v & 0x55555555) << 1);// swap consecutive pai
2016-01-17 20:00:34 3536
原创 Redis源码解析:02链表
链表提供了高效的节点重排能力,以及顺序性的节点访问方式,因为Redis使用的C语言并没有内置这种数据结构,所以Redis自己实现了链表。 链表在Redis中的应用非常广泛,比如列表的底层实现之一就是链表。当一个列表中包含的元素比较多时,又或者列表中包含的元素都是比较长的字符串时,Redis就会使用链表作为列表的底层实现。 除了列表之外,Redis中的发布与订阅、
2016-01-05 21:23:45 744
柔性数组成员
2018-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人