Redis的设计与实现(6)-压缩列表】的更多相关文章

压缩列表(ziplist)是列表键和哈希键的底层实现之一.当列表键只包含少量列表项,并且每个列表项要么是小整数值,要么是长度较短的字符串时:或者当哈希键只包含少量键值对,并且每个键值对的键和值要么是小整数值,要么是长度较短的字符串时,那么Redis就会使用压缩列表来做为列表键或哈希键的底层实现. 压缩列表是Redis为了节约内存而开发的,可用于存储字符串和整数值.它是一个顺序型数据结构,由一系列特殊编码的连续内存块组成.一个压缩列表可以包含任意多个结点(entry),每个entry的大小不定,每…
此篇文章是主要介绍Redis在数据存储方面的其中一种方式,压缩列表.本文会介绍1. 压缩列表(ziplist)的使用场景 2.如何达到节约内存的效果?3.压缩列表的存储格式 4. 连锁更新的问题  5. conf文件配置.在实践上的操作主要是对conf配置文件进行配置,具体上没有确切的一个值,更多是经验值.也有的项目会直接使用原本的默认值.此篇对于更好地理解一个数据库底层的存储逻辑会有一点帮助.修学储能,既要博,也要渊.希望这篇文章对同样也是在学习Redis的各位同伴有点用. 一.压缩列表(zi…
ziplist 是什么 Redis 哪些数据结构使用了 ziplist? ziplist 特点 优点 缺点 ziplist 数据结构 ziplist 节点 pre_entry_length encoding 和 length content ziplist 基本操作 创建新 ziplist 将节点添加到末端 将节点添加到某个/某些节点的前面 删除节点 参考链接 Redis 源码简洁剖析系列 ziplist 是什么 压缩列表,内存紧凑的数据结构,占用一块连续的内存空间.一个 ziplist 可以包…
压缩列表是 ZSET.HASH和 LIST 类型的其中一种编码的底层实现,是由一系列特殊编码的连续内存块组成的顺序型数据结构,其目的是节省内存. ziplist 的结构 外层结构 下图展示了压缩列表的组成: 各个字段的含义如下: zlbytes:是一个无符号 4 字节整数,保存着 ziplist 使用的内存数量. 通过 zlbytes,程序可以直接对 ziplist 的内存大小进行调整,无须为了计算 ziplist 的内存大小而遍历整个列表. zltail:压缩列表 最后一个 entry 距离起…
文中内容摘自<redis设计与实现> 简单动态字符串 1. Redis只会使用C字符串作为字面量,在大多数情况下,Redis使用SDS(Simple Dynamic String,简单动态字符串)作为字符串表示. 2. SDS包含以下三个属性: 1). free : 记录buf数组中未使用字节的数量 2). len : 记录buf数组中已使用自己的数量,等于SDS所保存字符串的长度 3). buf : char类型数组,用于保存字符串,最后一个字节是一个空字符'\0' 3. SDS遵循C字符串…
整数集合 Redis 中当一个集合(set)中只包含整数,并且元素不多时,底层使用整数集合实现,否则使用字典实现. 那么: 为什么会出现整数集合呢?都使用字典存储不行吗? 整数集合在 Redis 中的结构是怎样的呢? 引入整数集合之后,会不会出现什么弊端?Redis 又是如何去解决的呢? 为什么会出现整数集合呢?都使用字典存储不行吗? 说起无序集合(set),很自然的就想起哈希表,而哈希表表现也很好,提供了查询为 O(1) 的时间复杂度.但任何事物有优点,就必然会伴随着一些缺点,哈希表的缺点就是…
前言     同整数集合一样压缩列表也不是基础数据结构,而是 Redis 自己设计的一种数据存储结构.它有点儿类似数组,通过一片连续的内存空间,来存储数据.不过,它跟数组不同的一点是,它允许存储的数据大小不同. 一.压缩列表     听到"压缩"两个字,直观的反应就是节省内存.之所以说这种存储结构节省内存,是相较于数组的存储思路而言的.我们知道,数组要求每个元素的大小相同,如果我们要存储不同长度的字符串,那我们就需要用最大长度的字符串大小作为元素的大小(假设是20个字节).存储小于 2…
上一篇我们介绍了 redis 中的整数集合这种数据结构的实现,也谈到了,引入这种数据结构的一个很大的原因就是,在某些仅有少量整数元素的集合场景,通过整数集合既可以达到字典的效率,也能使用远少于字典的内存达到同样的效果. 我们本篇介绍的压缩列表,相信你从他的名字里应该也能看出来,又是一个为了节约内存而设计的数据结构,它的数据结构相对于整数集合来说会复杂了很多,但是整数集合只能允许存储少量的整型数据,而我们的压缩列表可以允许存储少量的整型数据或字符串. 这是他们之间的一个区别,下面我们来看看这种数据…
一.压缩列表ziplist在redis中的应用 1.做列表键 当一个列表键只包含少量列表项,并且每个列表项要么是小整数,要么是短字符串,那么redis会使用压缩列表作为列表键的底层实现 2.哈希键 当一个哈希键只包含少量的键值对,并且每个键值对的键和值要么是小整数,要么是短字符串,那么redis会使用压缩列表作为哈希键的底层实现 二.压缩列表的定义: 压缩列表ziplist是redis为了节约内存而开发的,是由一些了特殊编码的连续内存块组成的顺序数据结构 三.关于压缩列表的连锁更新 更新的是什么…
redis有五种数据类型string.list.hash.set.zset(字符串.哈希.列表.集合.有序集合)并且自实现了简单动态字符串.双端链表.字典.压缩列表.整数集合.跳跃表等数据结构.redis底层使用了多种数据结构来实现各种特性.对于Redis底层实现的了解,可以让我们对Redis工作原理更加清晰. 那么redis数据结构与内部编码,如下图: redis对象(redisObject) redis源码内部是有一个redisObject对象,redis的键值都是redisObject对象…