redis string 简单动态字符串
简单动态字符串
SDS(simple dynamic string)
结构:
struct sdshdr {
// 记录buf数组中已使用字节的数量
// 等于SDS所保存字符串的长度
int len;
// 记录buf数组中未使用字节的数量
int free;
// 字符数组,用于保存字符串
char buf[];
}
特点:
1.空间预分配
a.len < 1MB,分配和len属性同样大小的未使用空间,如SDS的len将变成13字节,程序也会分配13字节的未使用空间,buf数组的实际长度变成 13 + 13 + 1 = 27字节(额外的一个字节用于保存空字符)。
b.len >= 1MB,程序会分配1MB的未使用空间,如SDS的len将变成30MB,将会分配1MB的未使用空间,SDS的buf数组的实际长度为 30MB + 1MB + 1byte。
2.惰性释放空间
当SDS的API需要缩短SDS保存的字符串时,程序并不会立即使用内存重分配来回收缩短后多出来的字节,而是使用free树形将这些字节的数量记录起来,并等待将来使用。
————摘自《redis设计与实现》 黄健宏 著
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: