前言
你要是问我,在程序世界中我们程序员打交道最多的一种数据类型是什么?
我肯定会回答你是 字符串
那么在Redis中是如何实现的这种字符串数据结构呢?在Java中我们有 java.lang.String
类,在C语言中通过char[]
字符数组实现的字符串,总所周知Redis是由C语言实现的,那么Redis中的字符串就是通过C语言的char[]
字符数组实现的吗?
不是的,Redis是通过一个名叫SDS(Simple Dynamic String)简单动态字符串实现的
接下来,我们就来研究研究,为什么不直接使用C字符串,而是要在实现一套Redis自己的字符串数据结构。请系好安全带,马上发车!
什么是SDS
代码定义
struct sdshdr{
//记录buf数组中已使用的字节的数量
//等于SDS保存的字符串长度
int len;
//buf数组中未使用的字符个数
int free;
//字符数组,用于保存字符串
char buf[];
}
上面这个名为sdshdr
的结构体就是Redis中SDS的定义,很简单的对吧
下面使用两幅插图,形象的展示一下SDS中存放数据的时候是个什么样子的