摘要: AOF持久化的实现 命令追加 服务器执行写命令后,会将执行的写指令追加到 aof_buf 缓冲区: 追加到 aof_buf 缓冲区的命令是按照一定的协议格式保存的,catAppendOnlyGenericCommand 函数负责将命令转换为协议格式。从这个函数的实现可以清楚的看出协议格式是如何生成的 阅读全文
posted @ 2019-01-02 10:14 不学习就没有梦想 阅读(296) 评论(0) 推荐(0)
摘要: RDB触发机制 命令触发 SAVE:SAVE命令会阻塞Redis服务进程,知道RDB文件创建完毕为止。 BGSAVE:BGSAVE会创建子进程,子进程负责创建RDB文件,父进程继续处理命令请求 自动间隔性保存 当配置文件中save选项的条件满足时,服务器自动执行BGSAVE命令。 自动执行 BGSA 阅读全文
posted @ 2018-12-29 10:45 不学习就没有梦想 阅读(520) 评论(0) 推荐(0)
摘要: 服务器中的数据库 数据库的实现 Redis的所有数据库保存在redisServer结构的db数组中,每个redisDb结构代表一个数据库,redisServer结构中的dbnum变量决定了有多少个数据库(默认为16个数据库) redisDb的数据结构如下,blocking_keys 和 ready_ 阅读全文
posted @ 2018-12-28 12:08 不学习就没有梦想 阅读(324) 评论(0) 推荐(0)
摘要: 对象的类型与编码 在 Redis 中新创建一个键值对时, 我们至少会创建两个对象, 一个对象用作键值对的键(键对象), 另一个对象用作键值对的值(值对象)。Redis 中的每个对象都由一个 redisObject 结构表示: 对象类型 对象的type属性记录了对象的类型,type属性的值有以下几种: 阅读全文
posted @ 2018-12-25 11:59 不学习就没有梦想 阅读(248) 评论(0) 推荐(0)
摘要: 压缩列表的构成 压缩列表是为了节省内存而开发的,可以包含任意多个节点(entry),每一个节点可以保存一个字节数组或者一个整数值。 下图展示了压缩列表的各个组成部分, zlbytes:4字节,压缩列表所用的字节数 zltail:4字节,记录压缩列表尾节点entryN距离压缩列表的起始地址的字节数。 阅读全文
posted @ 2018-12-24 09:29 不学习就没有梦想 阅读(273) 评论(0) 推荐(0)
摘要: 整数集合的实现 整数集合(intset)是 Redis 用于保存整数值的集合抽象数据结构, 它可以保存类型为 int16_t 、 int32_t 或者 int64_t 的整数值, 并且保证集合中不会出现重复元素,同时底层数组中的元素按从小到大的顺序排列。 每个 intset.h/intset 结构表 阅读全文
posted @ 2018-12-21 10:12 不学习就没有梦想 阅读(238) 评论(0) 推荐(0)
摘要: 字典的实现 哈希表 Redis 字典所使用的哈希表由 dict.h/dictht 结构定义: typedef struct dictht { // 哈希表数组 dictEntry **table; // 哈希表大小 unsigned long size; // 哈希表大小掩码,用于计算索引值 // 阅读全文
posted @ 2018-12-20 15:11 不学习就没有梦想 阅读(206) 评论(0) 推荐(0)
摘要: 1 链表的实现 每个链表节点使用一个 adlist.h/listNode 结构来表示: typedef struct listNode { // 前置节点 struct listNode *prev; // 后置节点 struct listNode *next; // 节点的值 void *valu 阅读全文
posted @ 2018-12-04 16:25 不学习就没有梦想 阅读(237) 评论(0) 推荐(0)
摘要: Redis没有使用C语言的字符串结构,而是自己设计了一个简单的动态字符串结构sds。它的特点是:可动态扩展内存、二进制安全和与传统的C语言字符串类型兼容。下面就从源码的角度来分析一下Redis中sds的实现。 1 SDS的定义 SDS也有一个表头(header)用来存放sds的信息。 以下为一个SD 阅读全文
posted @ 2018-12-04 16:23 不学习就没有梦想 阅读(276) 评论(0) 推荐(0)
摘要: 功能函数总览 在zmalloc.h中,定义了Redis内存分配的主要功能函数,这些函数基本上实现了Redis内存申请,释放和统计等功能,其函数声明如下: void *zmalloc(size_t size); // 调用zmalloc函数,申请size大小的空间 void *zcalloc(size 阅读全文
posted @ 2018-11-15 17:40 不学习就没有梦想 阅读(747) 评论(0) 推荐(0)
levels of contents