redis-5大对象之---存储基础结构

第一节:字符串-SDS:字符串数组

字符串结构:
这里写图片描述
优势:
1、空间预分配:
free < 1M,则翻一倍,free=len
free > 1M,则free=1M
2、惰性释放
sdsclear:释放内容,但是内存不释放
sdsfree:释放空间和内容
3、还能存图片
二进制安全,以二进制来读写

第二节:链表-list

这里写图片描述
这里写图片描述
这里写图片描述

第三节:字典-HashMap-哈希表建立了索引的数组和链表

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述

渐进式rehash:
为了节省空间,维持一个合理的负载因子,需要进行对字典进行重组,这就是为什么字典有两个哈希表的原因,一个工作,一个备份,rehash的时候,两者都在工作。第一个哈希表没有,就查第二个。
渐进式:就是说rehash不是一次性完成,而是每次操作这个字典,进行一个trehashidx的操作,如果一次性,数据量大时,会使得某个命令很慢
rehash空间:扩展是当前的大小的2次幂,再加一倍
缩小:则当前的2次幂

第四节:跳跃表-zskiplist:多了层级概念的链表

这里写图片描述
这里写图片描述
跳跃表其实就是一个链表,按照分值大小来进行设定层级,物理上无序且不连续,层级上大小有序的链表,只是在链表节点加了大小指针;
主要是为了查找方便,查找一个数的耗时:O(logN),本质上就是二分查找

第五节:intset:整数集合–整数数组 有序不重复

这里写图片描述
这里写图片描述
节省空间:
1、升级:小号的类型保存大号的数值时,整个集合会进行数值类型升级,
2、升级的过程:升级肯定是放的数值类型大于现有类型,所以肯定大于所有数或小于所有数
3、没有降级的说法

第六节:压缩列表-ziplist压缩数据,连续内存存储,为节省空间

这里写图片描述
这里写图片描述
这里写图片描述
1、压缩列表:从后往前遍历
2、连锁更新:每个节点都会存取前一个节点的长度,如果存长度的地方不够存了,就会导致当前节点扩容,后续发生连锁扩容,导致效率低下。但这种情况下的几率很低

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值