Redis数据结构和对象(六)

Redis数据结构和对象(一)
Redis数据结构和对象(二)
Redis数据结构和对象(三)
Redis数据结构和对象(五)
Redis数据结构和对象(六)
Redis数据结构和对象(七)——对象

一,压缩列表。


  • 1,用途:列表键和哈希键的底层实现之一。当一个列表键只包含少量列表项,并且列表项要么是小整数值,要么是长度比较短的字符串。
  • 2,数据结构。
    • 1)压缩列表的构成。
    • 这里写图片描述
    • 2)压缩列表节点的构成。
      这里写图片描述
      • a) previous_entry_length
        • 长度可以为1字节或者5字节。前一节点的长度小于254,这个属性的长度1.如果大于等于254,则previous_entry_length属性值的第一个字节会被设置为0xFE,之后的节点则用于保存前一节点的长度。
        • 在获得了一个指向某个节点起始地址的指针,然后通过这个指针以及这个节点的previous_entry_length属性,就可以实现从表尾向表头遍历的操作。
      • b) encoding
        • 记录了节点的content属性所保存数据的类型和长度。
      • c) content
        • 负责保存节点的值。这个值可以是一个字节数组或者整数。值的类型和长度由节点的encoding属性决定。
  • 3,连锁更新。
    • 情况:在一个压缩列表里面,有多个连续的,长度介于250-253之间的节点,e1,e2,eN.如果这时候插入一个长度大于等于254字节的新节点new,并设置为表头节点,那么new就会成为e1的前置节点。因为e1的previous_entry_length属性仅长1字节,没法保存新节点new。所以程序将对压缩列表执行空间重新分配操作。将e1节点的previous_entry_length属性从1字节长扩展为5字节长。这时,e1的长度变成了介于254—257字节之间。此时,e2的情况将于e1的情况类似。导致出现连锁反应。连锁更新最坏的复杂度为O(N*N),考虑上空间重新分配。
    • 但是这种情况出现的几率很低。造成新能问题的几率是很低的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值