List底层
2021-07-25 15:55:52 0 举报
有序集合底层
作者其他创作
大纲/内容
V0
NULL
2
V1
dictht
zllen
ptr
typeREDIS_LIST
Vlaue
used2
type
'h'
zltail
len5
3
dictEntry*[4]
'e'
SDS
entry的结构
rehashidx-1
buf
StringObject“name”
ht
“Tom”
encodingREDIS_ENCODING_EMBSTR
K1
dictEntry
encoding
K2
size0
V2
“name”
age
“three”
table
在此使用链地址法,同时把k2放置于最前边,为了考虑速度,放置在最头上
StringObject1
1
K0
StringObject“Tom”
NEXT
encoding属性记录Content属性保存数据的类型和长度。Content记录内容
StringObject“age”
5
encodingREDIS_ENCODING_ LINKEDLIST
StringObject5
0
字典
previous_entry_length
第一个添加的键值对
ht[0]
private
'T'
...
content
StringObject“Three”
redisObject
encodingREDIS_ENCODING_ZIPLIST
sizemask3
StringObject“career”
ht[1]
StringObject25
zlend
18
typeREDIS_STRING
Key
dict
整个压缩列表占用的内存字节数,对压缩列表进行内存重分配的时候需要使用到
记录列表的尾节点距离初始节点的字节数,通过偏移量,无需遍历,有头直接获取到尾部
字典数据结构
zlbytes
解决HASH冲突
free0
hash对象使用字典的结构
记录压缩节点中包含的数量
used0
previous_entry_length主要记录前一个节点的总的字节数,如果前一个节点的长度小于255那么,这个字段就是一个字节,否则就是5个字节。好处:压缩队列从表尾到表头的遍历就是根据这个字段实现的。 只要知道一个节点的起始指针,就能够找到前一个节点的起始指针。当前节点起始位置P - previous_entry_length就是上一个节点的起始位置
链表
“programmer”
StringObject“Programmer”
't'
Hash表 底层使用压缩表的数据结构
career
size4
节点entry
在此发生冲突
sizemask0
0 条评论
下一页