返回顶部
首页 > 资讯 > 数据库 >Redis学习笔记(五) 压缩列表
  • 309
分享到

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

Redis学习笔记(五)压缩列表 2016-06-12 09:06:34 309人浏览 无得
摘要

压缩列表是列表键与哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长度较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。 压缩列表是为了节约内存而开发的,是由一系列特殊

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

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

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

压缩表可以包含:

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

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

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

4位长度的无符号整数

1字节长度有符号整数

3字节长的有符号整数

int16类型的整数

int32类型的整数

int64类型的整数

 

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

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

 

连锁更新

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

 

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

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

 

-------- end --------

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

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

 

 

您可能感兴趣的文档:

--结束END--

本文标题: Redis学习笔记(五) 压缩列表

本文链接: https://lsjlt.com/news/6068.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Redis学习笔记(五) 压缩列表
    压缩列表是列表键与哈希键的底层实现之一。当一个列表键只包含少量的列表项,并且每个列表项要么就是小整数值,要么就是长度较短的字符串,那么Redis就会使用压缩列表来做列表键的底层实现。 压缩列表是为了节约内存而开发的,是由一系列特殊...
    99+
    2016-06-12
    Redis学习笔记(五) 压缩列表
  • python学习笔记---列表
    列表属于python序列中的一种,属于可变序列,支持插入、删除和替换操作。1、定义列表:2、列表中元素的操作:    获取索引的元素 l[index]:    删除列表中指定索引的元素 del(l[index]):    修改指定元素l[i...
    99+
    2023-01-31
    学习笔记 列表 python
  • MySQL 学习笔记(五)
    mysqldump 与 --set-gtid-purged 设置 (1)  mysqldump The mysqldump client utility performs logical backups, producing a set ...
    99+
    2022-01-27
    MySQL 学习笔记(五)
  • Redis学习笔记(二) 链表
    链表提供了高效的节点重排能力,以及顺序性的节点访问方式,并且可以通过增删节点来灵活地调整链表的长度。 redis中链表应用广泛,如list中就使用了链表。 每一个链表节点使用listNode结构标识(双向链表): typedef...
    99+
    2017-01-27
    Redis学习笔记(二) 链表
  • 「学习笔记」循环、列表
    while循环与for循环    (一)while循环 结构: while: 循环体    (二)for循环 for 目标 in 表达式: 循环体  实例: favourite = 'fish' for i ...
    99+
    2023-01-30
    学习笔记 列表
  • Redis学习笔记(十五)Sentinel(哨兵)(中)
    上一篇 我们模拟了单机器下哨兵模式的搭建,那么接下来我们看下哨兵模式的实现与工作。 为什么又分成两篇呢?因为篇幅太长(偷懒),再一个这篇主要说的是Sentinel的初始化以及信息交换,下一篇着重说下状态检查、Sentinel头领选...
    99+
    2020-07-22
    Redis学习笔记(十五)Sentinel(哨兵)(中)
  • Python学习笔记五(Python
    Python urllib模块提供了一个从指定的URL地址获取网页数据,然后对其进行分析处理,获取想要的数据。1.查看urllib模块提供的urlopen函数。help(urllib.urlopen) urlopen(url, data...
    99+
    2023-01-31
    学习笔记 Python
  • javascript学习笔记(五)正则表达式
    常用到的元字符有: •. 查找单个字符,除了换行和行结束符; •\w 匹配字母、汉字、数字、下划线等符号; •\s 匹配空白符(包含空格、制表符等...
    99+
    2022-11-21
    正则表达式
  • Redis学习笔记记录
    基础篇 什么是Redis及快速理解Redis的使用 Redis解决的问题及Redis的特性 Redis的应用场景及正确安装与启动 Redis配置、启动、操作、关闭及版本选择 字符串使用与内部实现原理 字典使用与内部实现原理 列表...
    99+
    2016-01-10
    Redis学习笔记记录
  • redis geohash 学习笔记
    附近的人: 地图元素的位置数据使用二维的经纬度表示,经度范围 (-180, 180],纬度范围 (-90, 90],纬度正负以赤道为界,北正南负,经度正负以本初子午线 (英国格林尼治天文台) 为界,东正西负...
    99+
    2024-04-02
  • Python学习笔记(1)---列表和元
    什么是列表?列表是一种数据项构成的有限序列,即按照一定的线性顺序,排列而成的数据项的集合。列表的介绍一、更新列表1.元素赋值>>> a=[1,3,4,5]>>> a[1]=10 #改变a中第二个值为10&...
    99+
    2023-01-31
    学习笔记 列表 Python
  • Python第五周 学习笔记(2)
    一、实现一个cache装饰器,实现可过期被清除的功能 简化设计,函数的形参定义不包含可变位置参数、可变关键词参数和keyword-only参数 可以不考虑缓存满了之后的换出问题 1)原始 def cache(fn): imp...
    99+
    2023-01-31
    学习笔记 Python
  • Python学习笔记整理(五)Pytho
    列表和字段,这两种类型几乎是Python所有脚本的主要工作组件。他们都可以在原处进行修改,可以按需求增加或缩短,而且包含任何种类的对象或者被嵌套。 一、列表 列表的主要属性: *任意对象的有序集合 ...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • Python学习笔记8——列表、字典、元
    参考书籍:《Learning_Python_5th_Edition.pdf》,一本英文书呢,我上传到百度网盘吧,请点击这里,密码是:kym3 Lists 列表 The Python list object is the most gene...
    99+
    2023-01-30
    字典 学习笔记 列表
  • C++学习笔记之初始化列表
    目录一、用初始化列表初始化对象1.初始化列表用法2.初始化列表特性二、explicit关键字1.内置类型的隐式转换2.如何避免单参构造函数初始化发生隐式类型转换三、匿名对象1.匿名对...
    99+
    2023-05-17
    c++ 初始化列表 如何初始化列表 c++ 初始化
  • Python3学习笔记06——列表创建及
    在Python中使用for循环是,只要作用于一个可迭代对象,for循环就可以正常运行,而我们不太关心该对象究竟是list还是其他数据类型。 那么,如何判断一个对象是可迭代对象呢?方法是通过collections模块的Iterabl...
    99+
    2023-01-31
    学习笔记 列表
  • 学习笔记-小甲鱼Python3学习第五讲
    数据类型:整型、浮点型、布尔型整型:1、234、54浮点型:12.234、2.3e5 = 230000.0、1.5e-3 = 0.0015布尔型:True、False。True + True 返回 2,True + False 返回1,Tr...
    99+
    2023-01-31
    甲鱼 学习笔记
  • 学习笔记-小甲鱼Python3学习第十五
    字符串格式化符号含义符号说明%c格式化字符及其 ASCII 码%s格式化字符串%d格式化整数%o格式化无符号八进制数%x格式化无符号十六进制数%X格式化无符号十六进制数(大写)%f格式化浮点数字,可指定小数点后的精度%e用科学计数法格式化浮...
    99+
    2023-01-31
    甲鱼 学习笔记
  • Android学习笔记(十)——实现新闻列表
    【第一部分】历史文章: Android学习笔记(一)——创建第一个Android项目 Android学习笔记(二)android studio基...
    99+
    2022-06-06
    android学习 列表 Android
  • Android学习笔记(五)——RadioGroup&RadioButton
    实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用. RadioGroup是单选组合框,可以容纳多个RadioButton的容器. 在没有RadioGroup的情况下,RadioBut...
    99+
    2022-06-06
    android学习 radiobutton radiogroup Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作