
redis
zkp_java
这个作者很懒,什么都没留下…
展开
-
[redis] redis系列一:SDS字符串
注:本系列文章来自于对《redis设计与实现》的总结,并结合redis 5.0.3的源码进行分析redis没有直接使用C语言传统的字符串表示方式(以空字符串结尾的字符数组,以下简称C字符串),而是自己构建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS作为redis的默认字符串表示。在redis里,包含字符串值的键值对在底层都是有SDS实...原创 2019-03-26 00:19:41 · 483 阅读 · 0 评论 -
redis系列五:整数集合
整数集合(intset)是Redis用于保存整数值的集合抽象数据结构,它可以保存的类型为int16_t、int32_t或者int64_t的整数值,并且保证集合中不会出现重复元素。整数集合定义在intset.h文件中,具体定义如下:typedef struct intset { uint32_t encoding; uint32_t length; int8_t cont...原创 2019-03-30 09:53:30 · 760 阅读 · 0 评论 -
[redis] redis系列二:链表
redis中链表的数据结构定义如下:// 链表中的节点typedef struct listNode { // 节点的前驱 struct listNode *prev; // 节点的后继 struct listNode *next; // 节点上保存的值 void *value;} listNode;typedef struct listIter...原创 2019-03-26 21:50:47 · 249 阅读 · 0 评论 -
[redis] redis系列三:字典
redis中的字典使用哈希表作为底层实现,一个哈希表里面可以有多个哈希表节点,而每个哈希表节点就保存了字典中的一个键值对。数据结构哈希表节点结构哈希表节点结构定义如下:typedef struct dictEntry { // 键 void *key; // 值是一个union,即值可以是一个指针,或者一个unit64_t整数,或者int64_t整数 union ...原创 2019-03-26 23:45:15 · 287 阅读 · 0 评论 -
redis系列六:压缩链表
何时使用压缩链表当一个哈希键只包含少量键值对,并且每个键值对的键和值要么就是小整数,要么就是长度比较短的字符串,那么Redis就会使用压缩列表来做哈希键的底层实现。哈希键里面包含的所有键和值都是小整数值或者短字符串。...原创 2019-03-31 20:14:22 · 1123 阅读 · 0 评论 -
[redis]redis系列四:跳跃表
跳跃表通过在每个节点中维持多个指向其他节点的指针,从而达到快速访问节点的目的。跳跃表支持平均O(logN)、最坏O(N)复杂度的节点查找。跳跃表的实现跳跃表定义在server.h文件中,下图所示为一个跳跃表的示例:上图中最左边的是zskiplist结构,右边四个是跳跃表节点(zskiplistNode结构),跳跃表的结构定义如下:// 跳跃表节点typedef struct zskip...原创 2019-03-28 20:20:30 · 466 阅读 · 0 评论