简单动态字符串(SDS):simple dynamic string,C字符串最后多一个空字符,SDS比C字符串更适合redis
优点:1)C字符串长度要遍历,长度复杂度为O(n),SDS直接记录字符串长度,长度复杂度为O(1)
2)由于C字符串不记录字符串长度,易造成溢出,SDS空间分配策略完全杜绝缓冲区溢出的可能,因为在修改以前已经自动扩展至所需的大小
3)C字符串修改字符串长度可能造成内存溢出或者泄露,修改N次长度必须执行N次内存重新分配,SDS通过使用未使用空间解除了字符串长度和底层数据长度之间的关联,主要实现了空间预分配和惰性空间释放两种优化策略,修改N次长度最多执行N次内存重新分配
4)C字符串只能保存文本数据,SDS可以保存文本或者二进制数据
5)C字符串可以使用所有<string.h>库中的函数,SDS可以使用一部分<string.h>库中的函数
for example:set a a/rpush animal "chicken" "dog" "cat"
参考黄健宏老师的《Redis设计与实现》