Redis学习笔记(五) 压缩列表「终于解决」

Redis学习笔记(五) 压缩列表「终于解决」压缩列表是列表键与哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长度较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。 压缩列表是为了节

Redis学习笔记(五) 压缩列表

压缩列表是列表键与哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长度较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。

压缩列表是为了节约内存而开发的,是由一系列特殊编码的连续内存块组成的顺序型数据结构。一个压缩列表可以包含任意多的节点,每个节点可以保存一个字节数组或一个整数值。

压缩表可以包含:

1、长度小于等于63字节的字节数组

2、长度小于16383字节的字节数组

3、长度小于等于4294967295字节的字节数组

4、4位长度的无符号整数

5、1字节长度有符号整数

6、3字节长的有符号整数

7、int16类型的整数

8、int32类型的整数

9、int64类型的整数

 

每个压缩列表节点都由previous_entry_length、encoding、content三部分组成

说明:previous_entry_length 保存前一节点的长度,如果前一个节点长度小于254节点,那么previous_entry_length属性需要1字节长的空间来保存这个长度值;如果超度254则需要5个字节长的空间来保存这个长度。

 

连锁更新

由于是连续的内存片段,当在中间插入一个元素时,

 Redis学习笔记(五) 压缩列表「终于解决」

e1节点的 previous_entry_length属性仅长1字节,当将new节点设置为前置节点时,由于e1的previous_entry_length 长度为1无法保存new节点的长度,所以需要将长度扩展到5个字节空间,因此需要对列表进行空间重新分配操作。同理,如果引发了对e2、e3.。。。的扩展,这种操作称为连锁更新。

连锁更新在最坏的情况下需要对压缩列表执行n次空间的重分配操作,每次空间重分配的最坏复杂度为O(N),所以连锁更新最坏的的复杂度为O(N2)。

 

——– end ——–

每天学一点,总会有收获。

说明:尊重作者知识产权,文中内容参考《Redis设计与实现》,仅在此做学习与大家分享。

 Redis学习笔记(五) 压缩列表「终于解决」

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8457.html

(0)
上一篇 2023-02-27
下一篇 2023-02-27

相关推荐

  • 用Python实现自然对数函数的计算

    用Python实现自然对数函数的计算在介绍如何用Python实现自然对数函数的计算前,我们先来了解一下自然对数函数。

    2023-12-18
    118
  • mysql优化手段_MySQL索引优化

    mysql优化手段_MySQL索引优化
    Mysql数据库的优化技术 对mysql优化是一个综合性的技术,主要包括: a:表的设计合理化(符合3NF) b:添加适当索引(index)【四种:普通索引…

    2023-04-05
    165
  • RadonDB PostgreSQL on K8s 2.1.0 发布!

    RadonDB PostgreSQL on K8s 2.1.0 发布!RadonDB PostgreSQL Operator 于 1 月 21 日发布了 2.1.0[1]。 致谢: 首先感谢 @zhl003 @zlianzhuang @molliezhang 提交的修改

    2023-05-05
    154
  • redis的哨兵_地面哨兵

    redis的哨兵_地面哨兵[TOC] RedisSentinel哨兵 注意 若master实例故障,sentinel会重新选主并启动自动故障切换:选择slave-priority最小的那个slave实例并将其提升为maste…

    2023-02-02
    140
  • Oracle数据库简介[通俗易懂]

    Oracle数据库简介[通俗易懂]简介 Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目…

    2023-02-06
    143
  • clickhouse partition by_clickhouse删除和更新

    clickhouse partition by_clickhouse删除和更新UniqueMergeTree 开发的业务背景 首先,我们看一下哪些场景需要用到实时更新。 我们总结了三类场景: 第一类是业务需要对它的交易类数据进行实时分析,需要把数据流同步到 ClickHouse

    2023-05-20
    152
  • 常见SQL编写和优化[通俗易懂]

    常见SQL编写和优化[通俗易懂]常见的SQL优化方式 1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where及order by 涉及的列上建立索引 。 2. 应尽量 避免 在 where 子句中对字段进行null 值判断

    2022-12-24
    144
  • Python Slice函数详解

    Python Slice函数详解Python中的Slice函数是一种非常有用的操作方法,它可以帮助我们轻松地针对列表、字符串、元组等数据结构进行分片、切割等操作。本文将详细介绍该函数的用法,帮助Python初学者更好地掌握它的使用方法。

    2024-05-25
    68

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注