Redis 第一讲 STRING 类型
REDIS string 构建了SDS这种抽象类型(二进制安全)
sds.h/sdshdr基本结构
struct sdshdr {
int len; //记录已经使用的长度 (实际上C语言中\0为结束字符的长度1不计算在内)
int free; //未分配空间长度
char buff[]; //字节数组
}
相当于升级C语言结构体
1.减少了空间的分配:
增加字符串分配法则:诺我们新增加字符串长度为N,且当N大约free长度时会触发
1.1在len小于1MB的时候,重新分配内存,free会跟len(原len+N)一样的长度,系统会申请2*长度+1的空间。
1.2在len已经大于30MB的时候,那么free每次会重新申请len(原len+N)+1MB的空间。
减少字符串释放法则:惰性释放,只是把剩下的存储到free里面。(其实可以试用)
2.减少了查询字符串长度的复杂度:当求一个字符串长度的时候,复杂度由O(N)变为O(1)
3.减少缓冲区溢出
记录了FREE的长度,字符串N的长度过长,会重新分配好空间,然后进行数据存储
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: