redis设计与实现读书笔记

目录

第一部分 数据结构与对象

第1章 引 言

第2章 简单动态字符串

第3章 链表

第4章 字典

第5章 跳跃表

第6章 整数集合

第7章 压缩列表

第8章 对象

第二部分 单级数据库的实现

第9章 数据库

第10章 RDB持久化

第11章 AOF持久化

第12章 事件

第13章 客户端

第14章 服务器

第三部分 多机数据库的实现

第15章 复制

第16章 Sentinel

第17章 集群

第四部分 独立功能的实现

第18章 发布与订阅

第19章 事务

第20章 lua脚本

第21章 排序

第22章 二进制位数组

第23章 慢查询日志

第24章监视器

第一部分 数据结构与对象

第1章 引 言

1.数据库的键总是一个字符串对象,而数据库的值可以是字符串,列表,集合,有序集合,哈希任意一种。

第2章 简单动态字符串(SDS,Simple dynamic string)

1.C字符串与简单动态字符串SDS的内存结构:

2.C字符串与简单动态字符串SDS的区别:

C字符串SDS原因
获取字符串长度的复杂度为O(N)获取字符串长度的复杂度为O(1)由于SDS记录了长度信息
API是不安全的,可能造成缓冲区溢出API是安全的,不会造成缓冲区溢出由于SDS后面有free空间,C字符串都是一个挨着一个的
修改字符串长度N次,必然进行N次内存重新分配修改字符串N次,最多进行N次内存重新分配由于SDS通过利用free空间,实现了空间预分配和惰性空间分配优化策略
只能保存文本数据可以保存文本或者二进制数据由于SDS东西怎么存的就是怎么拿出来的,存的就是二进制
可以使用所有<string.h>库中的函数可以使用部分<string.h>库中的函数由于SDS可以重用其中的部分功能
   

第3章 链表

1.链表的结构

其中:

dup用于复制链表节点所保存的值

free用于释放链表节点所保存的值

match用于匹配值是否相等

2.链表的特性:

双向链表,无环,带有表头指针和表尾指针,带有长度,多态(链表节点使用void*指针保存节点的值,并且可以通过list结构的dup,free,match三个属性为节点值设定类型特定函数,所以,链表可以用于保存各种不同类型的值)


第4章 字典

1.字典的结构以及相关部分的解释:

第5章 跳跃表

第6章 整数集合

第7章 压缩列表

第8章 对象

第二部分 单级数据库的实现

第9章 数据库

第10章 RDB持久化

第11章 AOF持久化

第12章 事件

第13章 客户端

第14章 服务器

第三部分 多机数据库的实现

第15章 复制

第16章 Sentinel

第17章 集群

第四部分 独立功能的实现

第18章 发布与订阅

第19章 事务

第20章 lua脚本

第21章 排序

第22章 二进制位数组

第23章 慢查询日志

第24章监视器