Redis数据结构--SDS动态字符串
Redis中保存的key是字符串,value往往是字符串或者字符串的集合,但是redis并没有直接使用c语言中的字符串
原因在于:
1.获取字符串长度需要通过运算
2.非二进制安全
3.不可修改
SDS
struct sdshdr{ //记录buf数组中使用字节的数量 //等于SDS所保存字符串的长度 int len; //记录buf数组中未使用字节的数量 int free; //字节数组,用于保存字符串 char buf[]; }
SDS之所以叫动态字符串,是因为其具备自动扩容的能力
如果新字符串小于1M,则新空间为扩展后字符串长度的两倍+1
如果新字符串大于1M,则新空间为扩展后的字符串长度+1M+1
优点:
1.获取字符串长度的时间复杂度为O(1)
2.支持动态扩容
3.减少内存分配次数
4.二进制安全