为什么说redis的ziplist节约内存

i244782405 2019-01-26 11:49:21
为什么说redis的ziplist节约内存,看了他的数据结构,没catch到他节约内存这个点啊。大神们指点一下。
...全文
640 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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
  • 打赏
  • 举报
回复
数据是压缩后存储在内存的,所以节约了内存。 但是增加了压缩/解压的开销

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧