整理该书的重点知识,刚开始看这本书,发现作者整理的很好,比之前直接看源码舒服很多,看完书再看源码,就很简单、有趣了。
1、SDS(simple dynamic string,简单动态字符串),简单的讲Redis作者自己封装了一种字符串的抽象类型,和C语言字符串相比有诸多优点。
定义:
sds.h/sdshdr
struct sdshdr{
int len;//保存字符串的长度
int free;//buf数组中未使用的字节长度
char buf[];//字节数组,用于保存字符串
};
优点:
①二进制安全,意思是可以在字符串中存储‘\0’,普通的C字符串遇到‘\0’就认为是结尾了。
②获取字符长度复杂度为O(1)。
③API不会造成缓冲区溢出。
④修改字符串长度N次最多需要执行N次内存分配。
2、优化策略
空间预分配
对SDS修改后,如果SDS长度小于1MB,则分配与len属性相同的大小的未使用空间;如果SDS长度大于等于1MB,则分配1MB的未使用空间。
惰性空间释放
释放空间的时候,使用free属性记录这些释放的字节,以备下次使用。