下一章:Redis-数据结构02-简单动态字符串(sds)

定义:压缩列表ziplist本质上就是一个字节数组,可以包含多个元素,每个元素只能是一个字节数组或一个整数,等同于java当中的ArrayList

一:下图是压缩列表的数据结构图

zlbytes:表示整个ziplist有多少字节,占4个字节,因此压缩列表最多有2的32次方-1个字节。
zltail:压缩列表尾元素相对于压缩列表起始地址的偏移量,占4个字节。
zllen:压缩列表的元素个数,占2个字节。必须遍历整个压缩列表才能获取到元素个数。
entryN:压缩列表中的每个元素(关于entry下文有介绍)
zlend:压缩列表的结尾,占1个字节,恒为0xFF。

二:列表中的元素(entry)
压缩列表中元素(entry)的数据结构图

previous_entry_length:表示前一个元素的字节长度,假设已知当前元素的首地址为p,那么p减previous_entry_length就是前一个元素的首地址,从而实现压缩列表从尾到头的遍历。
encoding:表示content字段存储的数据类型,类型只能是下图9种之一,没有为什么,redis就是这么规定的

content:实际存储的内容,只能是整数或者字节数组

根据上面的entry结构图,redis将其结构更细致的抽象出了结构体,之所以说更细致是因为结构体中的字段比图中的要多出了几个,具体如下

压缩列表元素(entry)的结构体

typedef struct zlentry {//previous_entry_length的长度unsigned int prevrawlensize;//previous_entry_length的内容unsigned int prevrawlen;//encoding的长度unsigned int lensize;//content的长度(没错就是content)unsigned int len;//content的数据类型unsigned char encoding;//表示当前元素的首部长度,即prevrawlensize+lensize之和unsigned int headersize; //当前元素首地址unsigned char *p;
} zlentry;

下一章:Redis-数据结构02-简单动态字符串(sds)

Redis-数据结构01-压缩列表(ziplist)相关推荐

  1. 「Redis数据结构」压缩列表(ZipList)

    「Redis数据结构」压缩列表(ZipList) 文章目录 「Redis数据结构」压缩列表(ZipList) 一.概述 二.结构 三.连锁更新问题 四.压缩列表的缺陷 五.小结 参考 ZipList ...

  2. redis压缩列表ziplist的连锁扩容

    redis中的压缩列表在插入数据的时候可能存在连锁扩容的情况. 在压缩列表中,节点需要存放上一个节点的长度,当上一个entry节点长度小于254个字节的时候,将会一个字节的大小来存放entry中的数据 ...

  3. redis 底层数据结构 压缩列表 ziplist

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

  4. 【Redis源码剖析】 - Redis内置数据结构之压缩列表ziplist

    在前面的一篇文章[Redis源码剖析] - Redis内置数据结构之双向链表中,我们介绍了Redis封装的一种"传统"双向链表list,分别使用prev.next指针来指向当前节点 ...

  5. Redis 设计与实现 5:压缩列表 ziplist

    压缩列表是 ZSET.HASH和 LIST 类型的其中一种编码的底层实现,是由一系列特殊编码的连续内存块组成的顺序型数据结构,其目的是节省内存. ziplist 的结构 外层结构 下图展示了压缩列表的 ...

  6. Redis之压缩列表ziplist

    Redis是基于内存的nosql,有些场景下为了节省内存redis会用"时间"换"空间". ziplist就是很典型的例子. ziplist是list键.has ...

  7. redis 基础数据结构 之压缩列表

    redis基础数据结构 之 ziplist压缩链表 给新观众老爷的开场 ziplist是什么? ziplist的设计目的 ziplist的作用 ziplist的小瑕疵 ziplist 的空间布局 zl ...

  8. Redis 数据结构 :SDS、链表、字典、跳表、整数集合、压缩列表

    文章目录 SDS 结构分析 内存策略 空间预分配 惰性空间释放 总结 链表 结构分析 总结 字典 结构分析 rehash 渐进式rehash 总结 跳表 结构分析 总结 整数集合 结构分析 升级 降级 ...

  9. Redis源码解析:07压缩列表

    压缩列表(ziplist)是列表键和哈希键的底层实现之一.当列表键只包含少量列表项,并且每个列表项要么是小整数值,要么是长度较短的字符串时:或者当哈希键只包含少量键值对,并且每个键值对的键和值要么是小 ...

  10. vb6 获取zip列表_深入学习redis(压缩列表)

    免责声明: 本人水平有限,难免有疏漏的地方.如果读者遇到文章中需要改进或者看不懂,甚至是觉得错误的地方,可以给我留言.我想做一个比较全面由浅入深去讲解redis原理和进阶的系列文章,内容偏源码较硬核, ...

最新文章

  1. 2019.01.07|区块链技术头条
  2. c 复杂的前置后置面试题_OPPO Reno拆解:优秀工艺由外而内,复杂用料不负旗舰之名...
  3. 分布式和集群区别以及分布式事务
  4. js遍历json数组给html td赋值,JS实现给json数组动态赋值的方法示例
  5. 深度学习笔记(37) 交并比
  6. c语言枚举和结构体的区别,全面了解结构体、联合体和枚举类型
  7. 第八届蓝桥杯第十题 k倍区间
  8. python从入门到_python从入门到项目实践 (明日科技) 配套视频教程+源码
  9. UVA 10733 - The Colored Cubes(Ploya)
  10. 使用com.google.code.maven-replacer-plugin插件为前端代码自动添加版本号
  11. 未成年人勿进 谨以献给1980~1990出生的人(三)
  12. 什么是剩余参数 ...arg
  13. c语言字符数组自动填充,数组在C中自动填充
  14. [渝粤教育] 四川大学 货币金融学 参考 资料
  15. 如何使用微信开发者工具调试在微信端访问的网页
  16. Undirected Vertex Geography
  17. python——tensorflow使用和两层全连接神经网络搭建
  18. 加密流量分类-论文6:Learning to Classify A Flow-Based Relation Network for Encrypted Traffic Classification
  19. 软考__第17章 战略管理
  20. 大学计算机思维编程题及答案,学编程必看:10道逻辑思维测试题(附答案)

热门文章

  1. es6删除数组某项_javascript基础系列:数组常用方法解析
  2. python的pip_Python3中安装pip3
  3. 周长相等的正方形面积一定相等_三年级下册数学期末重点——面积
  4. mysql 等于_mysql 不等于 符号写法
  5. java数组r.id_Android HelloViews Spinner教程R.id和R.array无法解析
  6. MATLAB模拟声压分布,基于Matlab仿真软件构建圆形压电晶体三维模型
  7. Tomcat - Springboot启动的时候初始化的线程池默认配置
  8. html中的空格表示
  9. Mysql允许root用户远程访问
  10. Git如何创建本地分支并推送到远程仓库