Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串表示。
个人感觉SDS类似于Java的ArrayList,大家可以拿两者对比一些,谁的效率更加高一点。
1 struct sdshdr { 2 3 // 记录 buf 数组中已使用字节的数量 4 // 等于 SDS 所保存字符串的长度 5 int len; 6 7 // 记录 buf 数组中未使用字节的数量 8 int free; 9 10 // 字节数组,用于保存字符串 11 char buf[]; 12 13 };
这里注意一下。C语言的char是占一个字节的。不像Java的char占两个字节。也就是只有八位,-127 - 128。
1. 常数复杂度获取字符串长度
2. 减少修改字符串时带来的内存重分配次数
3. 二进制安全,以及可以保存空字符
buf
数组里的数据
原文:https://www.cnblogs.com/wenbochang/p/11666734.html