Redis底层数据结构

 1.简单动态字符串(simple dynamic string, SDS)

组成:leng(长度)+free(空闲长度)+buf(二进制数组用于存储内容)

优点:

查询字符串长度更快

因为有free,可以杜绝溢出

减少内存重分配(更改内容先检查len,不够时补free,且len小于1m时,新增free=len,len大于1m时,free=len)

1.简单动态字符串

  2.链表

组成:头结点指针+尾结点指针+结点长度

结点:前一个结点指针+后一个结点指针+结点value

2.链表

  3.字典

组成:两个哈希表,一个空着用于rehash

哈希:哈希数组组成的链表(kv值+指向下一个结点的指针)+size+used+mask(mask=size-1)

rehash:当一个哈希表不够的时候,将进行类似复制算法来rehash

3.字典

  4.跳跃表

组成:结点+描述

结点:层(1-32层)+前进指针+跨度+后退指针+分值+保存成员

描述:头指针+尾指针+最高层(不包含头结点)+长度(不包含头结点)

4.跳跃表

  5.整数集合

组成:编码方式+长度+内容数组

升级操作:若有一个新加数为Int64,则全部变为int64

降级操作:不支持

5.整数集合

  6.压缩列表

组成:描述+结点

描述:总占用内存+尾结点距离头结点的偏移字节+结点数量+结点+末尾结点标识

结点:前一个结点的长度+编码+内容

6.压缩列表

猜你喜欢

转载自blog.csdn.net/yang_154116/article/details/81089410