Redis底层数据结构_笔记

1.SDS动态字符串

属性:字符数组、length、free(可用空间)
embstr和raw都是由SDS动态字符串构成的。唯一区别是:raw是分配内存的时候,redisobject和 sds 各分配一块内存,而embstr是redisobject和raw在一块儿内存中。
优点:
c语言中字符串如果修改需要重新分配空间,否则会出现数据溢出;sds如果字符串变动不必每次开辟新空间,当可用空间不足时,扩容为原空间2倍。
c语言获取字符串长度需要遍历,sds可直接获取

2.链表

属性:头节点、尾节点、元素个数
节点属性:前置、后置、值
优点:
包含头尾节点和length,元素可以存放不同类型的值

3.哈希表

属性:元素数组、数组长度、元素个数、
元素属性:key,value,next
next用来存放hash冲突时的节点
类似于java中的HashMap

4.字典

包含两个哈希表,一个rehash标识(-1标识正在rehash),用于rehash重新散列,rehash是渐进性操作满足rehash条件之后,每次的增删查操作都会进行节点迁移,避免因大批量数据迁移导致服务崩溃

5.跳跃表

属性:头节点、尾节点、节点数量、层数
跳跃表是一种有序的结构,是zset的实现方法之一

6.压缩表

属性:zlbytes总字节长度、zltail尾节点距离头起始地址字节长度、zllen包含节点数量、entryX各个节点、zlend标记压缩表结尾,类似一种协议、约定

Redis各数据类型使用的存储方式

字符串

int 数字
raw 长字符串 长度大于39字节
embstr 短字符串 长度不大于39字节 只读, 如果要写, 则先转换为raw
后来版本的redis使用44做为embstr和raw的区分了

list

ziplist 每个元素长度小于64字节 且元素数量小于512
双向链表 其他情况

hash

ziplist 每个元素长度小于64字节 且元素数量小于512
哈希表 其他情况

set

intset 每个元素都是整形,且元素数量小于512
哈希表 其他情况

zset

ziplist 每个元素长度小于64字节 且元素数量小于128
跳表 其他情况

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值