redis设计与实现读书笔记
目录
第一部分 数据结构与对象
第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.字典的结构以及相关部分的解释: