底层数据结构
redis底层数据结构有:字典、双端链表、压缩链表、整数集合、跳跃表和字典、整数集合、embstr 编码的简单动态字符串、long 类型的整数,redis在应用层面表现出来的数据类型都是通过一个或者多个底层数据结构实现的,下面会对每个数据结构进行说明。
sds简单动态字符串
sds的结构如下:
struct __attribute__ ((__packed__)) sdshdr32 {
uint32_t len; /* used 使用的长度*/
uint32_t alloc; /* excluding the header and null terminator 剩余的长度 */
unsigned char flags; /* 3 lsb of type, 5 unused bits */
char buf[]; //字符数组
};
sds和C中的字符串不同之处在于,sds使用len表示字符串的实际长度,使用带有冗余buffer的字符数组存储字符串,同时为了兼容c的字符串,在字符串的结尾处设置了空字符;这样做优点是:1、常数复杂度获取字符串长度,2、杜绝了缓冲区溢出,3、采用buffer预分配和惰性空间释放,减少修改字符串带来的内存重新分配次数。4、二进制安全
【未完待续】