社区
Java EE
帖子详情
为什么说redis的ziplist节约内存
i244782405
2019-01-26 11:49:21
为什么说redis的ziplist节约内存,看了他的数据结构,没catch到他节约内存这个点啊。大神们指点一下。
...全文
725
6
打赏
收藏
为什么说redis的ziplist节约内存
为什么说redis的ziplist节约内存,看了他的数据结构,没catch到他节约内存这个点啊。大神们指点一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
k2z
2020-04-21
打赏
举报
回复
typedef struct zlentry { unsigned int prevrawlensize, prevrawlen; unsigned int lensize, len; unsigned int headersize; unsigned char encoding; unsigned char* p; } zlentry;
// 这是zlentry的结构体 楼主的疑惑点应该是从上述结构体来看,一个zlentry占据的空间相较双向链表没有更少反而更多。 但是,从源码来看,__ziplistInsert函数进行新节点插入时,并不存储prevrawlensize/lensize,而在取节点时通过prerawlen/len去确定,再进行相应操作。 同时,在__ziplistInsert函数插入新节点时,会根据prerawlen/len的实际大小为这两个值分配存储空间。 // ziplist两方面节省内存:
- 第一,之前的内容 - 第二,分配大块内存减小内存碎片
qq_39849130
2020-04-06
打赏
举报
回复
64位系统双向链表一个节点prev和next指针就16字节了,ziplist主要省的内存就在这儿了
你家熊博士
2019-07-16
打赏
举报
回复
这个压缩链表都在一块连续的空间上创建,碎片化的空间小了,不久节约了
-星星-
2019-02-28
打赏
举报
回复
变为linkedlist是因为他的数据太紧凑了,导致增改操作需要大量内存支持吧
-星星-
2019-02-28
打赏
举报
回复
除了头和尾大部分都是数据,linkedlist是按照项最大的数据类型存的(每一个都是,为啥数据量大了变为linkedlist就不知道了) 相对于dict来说更好维护吧(只是因为数据量大了查询效率降低才变为dict)
tianfang
2019-01-29
打赏
举报
回复
数据是压缩后存储在内存的,所以节约了内存。 但是增加了压缩/解压的开销
Redis
内部数据结构详解之压缩链表(
zip
list
)
本文所引用的源码全部来自
Redis
2.8.2版本。
Redis
中
zip
list
数据结构与API相关文件是:
zip
list
.h,
zip
list
.c, t_zset.c。 一、
zip
list
的构成 是一个4字节无符号整数,用来存储整个
zip
list
占用的字节数; 是一个4字节无符号整数,用来存储
zip
list
最后一个节点的相对于
zip
list
首地址偏移量; 是一个2字节
Redis
学习(6)——压缩列表(
zip
list
)
今天学习
Redis
的压缩列表(
zip
list
),看着书上写的:压缩表是列表键和哈希键的底层实现之一。于是自己就在
Redis
上试了一下,可是在测试列表键的时候却发现查看属性,发现不是“
zip
list
”而是“quck
list
”,于是自己又试了不同的小整数和短字符串,发现都是“quck
list
”实现的。查询后才知道,
Redis
已经将3.2之后的版本的列表的底层实现由quck
list
实现,取代了曾经的zi...
Redis
数据结构之——
zip
list
Redis
数据结构之——
zip
list
压缩列表
zip
list
zip
list
和普通的双向链表不同 ,
zip
list
不存储指向上一个链表节点和指向下一个链表节点的指针,而是存储上一个节点长度和当前节点长度,通过牺牲部分读写性能,来换取高效的
内存
空间利用率,
节约
内存
,是一种时间换空间的思想。
zip
list
使用连续
内存
地址+偏移量的方式实现链表。 适合存储一些int类型的数据或者长度比较短的字符串。 压缩列表是
Redis
为
节约
空间而实现的一系列特殊编码的连续
内存
块组成的顺序型数据结构, 本质上是字节数组。
8.
Redis
底层数据结构——
zip
list
和
list
pack
本文介绍了
redis
zip
list
和
list
pack的实现,以及讲了为什么从
zip
list
迁移到了
list
pack
Java EE
67,535
社区成员
225,852
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章