建议先关注、点赞、收藏后再阅读。
SDS(Simple Dynamic String)是Redis中用于处理字符串的数据结构。
它的内部结构由头部和数据部分组成。
struct sdshdr {
unsigned int len; // 字符串的长度
unsigned int free; // 剩余可用空间的长度
char buf[]; // 实际存储字符串的内存空间
};
len
:表示字符串的长度。这里的长度是指实际存储的字符数量,不包括空字符\0
。通过这个字段可以直接获取字符串的长度,而无需遍历整个字符串。free
:表示可用空间的长度,即当前头部之后的内存空间还有多少字节可用。这个字段的作用是为了避免频繁扩容,当需要对字符串进行修改时,如果空间足够,就直接在后面进行插入或追加操作,不需要重新分配内存。buf
:是实际存储字符串的内存空间。注意,这里的buf
是一个柔性数组(Flexible array member),没有指定长度,实际长度由len
和free
字段决定。数据部分则是存储实际字符串内容的内存区域,长度为len
字段的值。在这个内存区域里面,通过\0
字符来标识字符串的结尾。
+--------------------+
| SDS 头部 |
+--------------------+
| 数据部分 |
+--------------------+
SDS的头部长度固定为16个字节,不论实际字符串的长度如何,所以对于小字符串的存储开销较大,而对于较大的字符串则相对较小。这是Redis为了追求性能与灵活性做出的设计选择。
SDS的长度和空间预分配策略对Redis的性能有正面的影响,通过高效获取长度和减少内存重分配操作,提高了Redis在处理字符串时的性能表现。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。