redis数据结构-SDS
2024-04-26 15:16:30 5 举报
redis的数据结构--简单动态字符串
作者其他创作
大纲/内容
RedisObject
已不使用
64byte连续的内存空间
len现有长度<=44
alloc已分配空间
flagssdshdr8类型
buf[]字符数字
'\\0'结束符
RedisObject-SDS
SDS-Key只有String类型
dict entry
底层数据结构
4byte
共用4字节位域定义法
LFU 访问次数,访问时效性counter (前8bit) 访问次数,另有算法,非访问一次+1ldt (后16bit) 最近访问时间戳
val 指针
uint 64
int 64
double
len <= 44 直接嵌入
当值为这三种数据类型时,则不需要val指针优点:节省内存
type数据类型
encoding编码类型
lrulru时间
refcount引用计数
ptr指向值的指针
redis数据结构局部
16byte
pointer
避免结构头比实际字符数组都要大
[嵌入式字符串]sds类型:sdshdr8优点:1、避免内存的碎片化2、避免两次内存分配
两个hashtable
bucket哈希桶
8byte
sdshdr采用紧凑内存布局,非8字节对齐
sdshdr5
sdshdr8
sdshdr16
sdshdr32
sdshdr64
2byte
4bit
24bit
len > 44时
string、list、hash...
uint8_t
uint16_t
uint32_t
uint64_t
... ...
优点:节省内存,避免使用统一的结构头
ht[1] 仅在rehash时使用
len现有长度>44
flagsSDS的类型
1byte
44byte
ht[0]
len > 44 再次分配内存,指向SDS
SDS
key
value
next
len <=44时
0 条评论
下一页