redis
princeteng
这个作者很懒,什么都没留下…
展开
-
redis源码注释七:数据库db.c
0. 本文要点主要讲和Redis 数据库的构造和实现。1)数据库如何存储对象?redisDb数据库结构体2)数据库中键的操作3)键的过期时间4)过期键的处理5)过期键与AOF和RDB1. 数据库结构体typedef struct redisDb { dict *dict; /* The keyspace for this DB */ //数据...原创 2020-04-17 09:10:39 · 389 阅读 · 0 评论 -
redis源码注释六:对象系统
1. 对象类型和内部编码我们之前分析了几种redis底层的数据结构,包括简单字符串、双端链表、字典、跳表、整数集合、压缩列表等,这些还不是redis的对象类型,redis的对象类型总共包含5种,分别是字符串、列表、集合、有序集合、哈希,在server.h中定义。/* The actual Redis Object */#define OBJ_STRING 0 /* String obj...原创 2020-04-16 15:03:58 · 264 阅读 · 3 评论 -
redis源码注释五:整数集合intset.c intset.h
0. 源码注释位置1. 何为整数集合整数集合,顾名思义,是整数的集合,用于实现redis中的set,redis中的set也可以通过哈希表实现,为什么要有整数集合呢?这里考虑的是省内存,整数集合在数据量较小的情况下会占用更少的内存。内存映射数据结构是一系列经过特殊编码的字节序列,创建它们所消耗的内存通常比作用类似的内部数据结构要少得多,如果使用得当,内存映射数据结构可以为用户节省大量的内存...原创 2020-04-15 16:48:31 · 238 阅读 · 0 评论 -
redis源码注释四:跳表
0. 跳表0.1 简介跳跃表(skiplist)是一种随机化的数据,由William Pugh 在论文《Skip lists: a probabilisticalternative to balanced trees》中提出,这种数据结构以有序的方式在层次化的链表中保存元素,它的效率可以和平衡树媲美——查找、删除、添加等操作都可以在对数期望时间下完成,并且比起平衡树来说,跳跃表的实现要...原创 2020-04-15 12:01:30 · 301 阅读 · 0 评论 -
redis源码注释三:字典dict.c dict.h
1. dict简介redis的字典是使用哈希表实现的,存储key-value,每个字典有两个哈希表,0号哈希表(ht[0])是字典主要使用的哈希表,而1号哈希表(ht[1])则只有在程序对0号哈希表进行rehash时才使用。哈希表采用拉链式,当链比较长(或者比较短)的时候就要进行rehash,尽量使得大小和保存的结点数比例维持在1:1左右。如果不满足就要进行rehash,即哈希表的扩容和缩容。...原创 2020-04-14 15:05:37 · 327 阅读 · 0 评论 -
redis源码注释二:简单字符串sds.c sds.h
1. sds(Simple Dynamic String)简介sds(Simple Dynamic String)简单动态字符串。redis没有直接用char*,而是使用sds替代char*。为什么不用char*呢,只要有以下考虑:因为char* 类型的功能单一,抽象层次低,并且不能高效地支持一些Redis 常用的操作(比如追加操作和长度计算操作),所以在Redis 程序内部,绝大部分情况...原创 2020-04-11 11:51:33 · 333 阅读 · 0 评论 -
redis源码注释一:双端链表adlist.c adlist.h
1. 链表结构1.1 结点结构链表中每个结点的结构在adlist.h中:typedef struct listNode { struct listNode *prev; //指向前驱结点的指针 struct listNode *next; //指向后继结点的指针 void *value; //指向结点值的指针} listNode;结点的...原创 2020-04-09 13:59:54 · 205 阅读 · 0 评论