《redis 5设计与源码分析》:第二章 简单动态字符串
介绍
简单动态字符串(Simple Dynamic Strings, SDS)是Redis的基本数据结构之一,用于存储字符串和整型数据。它的特点是:方便扩容、二进制安全。
二进制安全
在C语言中,用"\0"表示字符串结束,如果字符串本身有"\0"字符,字符串就会被阶段,即非二进制安全;通过某种手段,避免读写字符串时被截断,则是而二进制安全
结构体设计
SDS的结构体大致为
struct sds {
int len; // buf中已占用字节数
int free; // buf中剩余可用字节数
char buf[]; // 数据空间
}
实际存储结构为
在64位系统下,字段len和字段free各占4个字节,紧挨着存放字符串。
设计优点
1.使用len字段统计存储长度,读写字符串是不依赖终止字符"\0",保证了二进制安全。
2.数据空间使用柔性数组,大大提升数据空间使用率。