redis
princeteng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
redis源码注释七:数据库db.c
0. 本文要点 主要讲和Redis 数据库的构造和实现。 1)数据库如何存储对象?redisDb数据库结构体 2)数据库中键的操作 3)键的过期时间 4)过期键的处理 5)过期键与AOF和RDB 1. 数据库结构体 typedef struct redisDb { dict *dict; /* The keyspace for this DB */ //数据...原创 2020-04-17 09:10:39 · 455 阅读 · 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 · 310 阅读 · 3 评论 -
redis源码注释五:整数集合intset.c intset.h
0. 源码注释位置 1. 何为整数集合 整数集合,顾名思义,是整数的集合,用于实现redis中的set,redis中的set也可以通过哈希表实现,为什么要有整数集合呢?这里考虑的是省内存,整数集合在数据量较小的情况下会占用更少的内存。 内存映射数据结构是一系列经过特殊编码的字节序列,创建它们所消耗的内存通常比作用类似 的内部数据结构要少得多,如果使用得当,内存映射数据结构可以为用户节省大量的内存...原创 2020-04-15 16:48:31 · 278 阅读 · 0 评论 -
redis源码注释四:跳表
0. 跳表 0.1 简介 跳跃表(skiplist)是一种随机化的数据,由William Pugh 在论文《Skip lists: a probabilistic alternative to balanced trees》中提出,这种数据结构以有序的方式在层次化的链表中保存元 素,它的效率可以和平衡树媲美——查找、删除、添加等操作都可以在对数期望时间下完成, 并且比起平衡树来说,跳跃表的实现要...原创 2020-04-15 12:01:30 · 359 阅读 · 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 · 385 阅读 · 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 · 386 阅读 · 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 · 242 阅读 · 0 评论
分享