Redis底层数据结构之-动态字符串

20 阅读1分钟

先看SDS结构

1、SDS获取字符串长度的时间复杂度为O(1),直接通过获取len的长度得到,因此redis获取字符串长度不会成为性能瓶颈

2、SDS使用了内存预分配策略,一个空间换时间的策略。redis对字符串进行拼接时,不会像c/Java一样去申请内存,而且先看free剩余的内存是否足够,如果足够则直接使用。这个操作降低了内存分配的时间复杂度(从至少n次分配到最多n次),同时这个操作还能防止缓冲区溢出

3、SDS对字符串进行截取的时候,采用了惰性空间释放,使用trim()函数截取时,空间不会立马回收,而是增加free的长度,等待下次使用

4、二进制安全,动态字符串完整地保存原始字符串,并不会对存入的字符串做任何数据格式转换(如c会对\0作为数据的结束标识)