redis底层数据组织方式

底层数据结构

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、二进制安全
【未完待续】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容