Redis常见容器

Redis常见容器

简单动态字符串

image-20200505145909480

优势:

  • 尝试复杂度获取字符串长度
  • 杜绝缓冲区溢出
  • 减少修改字符串时带来的内存重分配次数
    • 空间预分配
    • 惰性空间释放
  • 二进制安全(保存二进制文件)
  • 兼容部分C字符串函数

链表

链表节点:

image-20200505150925828

链表头:

image-20200505151129336

字典

哈希表

image-20200505151308350
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnrtdubH-1588829887895)(https://i.loli.net/2020/05/05/CxAloVG2nQZzs5T.png)]

哈希表节点:

image-20200505151558144

字典

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YhMPSZSy-1588829902652)(https://i.loli.net/2020/05/05/CUWRl3bwmtA4ZhX.png)]

哈希算法与冲突解决

哈希计算:

# 使用字典设置的哈希函数,计算键key的哈希值
hash = dirct->type->hashFunction(key);
# 使用哈希表的sizemaks属性和哈希值,计算出索引值	根据情况不同,hx[x]可以时hx[0]或hx[1]
index = hash & dict->hx[x].sizemask;

冲突解决:

​ 链地址法解决冲突

Rehash

条件:

image-20200505153405197

过程:

image-20200505153113464

方式:

​ 渐进式rehash

跳跃表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MVmRBMPm-1588829918203)(https://i.loli.net/2020/05/05/LkcMAQSdGbFCutl.png)]

image-20200505154234961

整数集合

image-20200505154506023

升级:

​ 每当我们要将一个新元素添加到整数集合里面,并且新元素的类型比整数集合现有所有元素的类型都要长时,整数集合需要先进行升级( upgrade),然后才能将新元素添加到整数集合里面。

升级的优势:

  • 提升灵活性
  • 节约内存

压缩列表

image-20200505155346853

节点:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-R7gcUJEu-1588829864360)(https://i.loli.net/2020/05/05/pUagD1d8C9Yh4No.png)]

previous_entry_length:

​ 节点的 previous_entry_length属性以字节为单位,记录了压缩列表中前一个节点的长度。 previous_entry_length属性的长度可以是1字节或者5字节:

  • 属性长度
    • 当前一节点长度小于254字节时,采用1字节空间存储前一节点的长度
    • 当前一节点长度大于等于255字节时,采用5字节空间存储前一节点的长度

encoding:

​ 节点的encoding属性记录了节点的content属性所保存数据的类型以及长度。

  • 属性长度
    • 一字节、两字节或者五字节长,值的最高位为00、01或者10的是字节数组编码:这种编码表示节点的 content属性保存着字节数组,数组的长度由编码除去最高两位之后的其他位记录
    • 一字节长,值的最高位以11开头的是整数编码:这种编码表示节点的 content属性保存着整数值,整数值的类型和长度由编码除去最高两位之后的其他位记录;

content:

​ 节点的 content属性负责保存节点的值,节点值可以是一个字节数组或者整数,值的类型和长度由节点的 encoding属性决定。

连锁更新问题:

插入时的连锁更新:

image-20200505165535969

删除时的连锁更新:

image-20200505165825566
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t7icwbJI-1588830055837)(https://i.loli.net/2020/05/07/DRX7qdWCPVeBsSU.png)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值