SDS是Redis自己构建的一种抽象类型,并将SDS用作Redis的默认字符串表示
sds.h/sdshdr
struct sdshdr { // 记录buf数组中字节长度,即SDS所报寸字符串的长度 int len; // 记录buf书中未使用的字节数量 int free; // 字节数组,用于保存字符串 char buf[]; };那么redis将在数据库中创建一个新的键值对,其中
键(k1),是一个SDS,len = 2, free = 0,buf[] = |’k’|’1’|’\0’|值(k1),是一个SDS,len = 2, free = 0,buf[] = |’v’|’1’|’\0’|当对 SDS 进行增长操作时,程序不仅会为 SDS 分配修改所需要的内存空间,还会为 SDS 分配额外的未使用的内存空间
减少 SDS 长度后,不会释放空余内存空间,而是将其做为未使用空间保留在SDS里面,并记录在 free 属性中,如果将来需要扩展 SDS ,有可能就不需要重新进行内存重新分配操作。