《Redis设计与实现》之SDS

整理该书的重点知识,刚开始看这本书,发现作者整理的很好,比之前直接看源码舒服很多,看完书再看源码,就很简单、有趣了。

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属性记录这些释放的字节,以备下次使用。

你可能感兴趣的:(Redis)