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

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

字符串结构:
redis-5大对象之---存储基础结构_第1张图片
优势:
1、空间预分配:
free < 1M,则翻一倍,free=len
free > 1M,则free=1M
2、惰性释放
sdsclear:释放内容,但是内存不释放
sdsfree:释放空间和内容
3、还能存图片
二进制安全,以二进制来读写

第二节:链表-list

redis-5大对象之---存储基础结构_第2张图片
redis-5大对象之---存储基础结构_第3张图片
redis-5大对象之---存储基础结构_第4张图片

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

redis-5大对象之---存储基础结构_第5张图片
redis-5大对象之---存储基础结构_第6张图片
redis-5大对象之---存储基础结构_第7张图片
redis-5大对象之---存储基础结构_第8张图片
redis-5大对象之---存储基础结构_第9张图片

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

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

redis-5大对象之---存储基础结构_第10张图片
redis-5大对象之---存储基础结构_第11张图片
跳跃表其实就是一个链表,按照分值大小来进行设定层级,物理上无序且不连续,层级上大小有序的链表,只是在链表节点加了大小指针;
主要是为了查找方便,查找一个数的耗时:O(logN),本质上就是二分查找

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

redis-5大对象之---存储基础结构_第12张图片
redis-5大对象之---存储基础结构_第13张图片
节省空间:
1、升级:小号的类型保存大号的数值时,整个集合会进行数值类型升级,
2、升级的过程:升级肯定是放的数值类型大于现有类型,所以肯定大于所有数或小于所有数
3、没有降级的说法

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

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

你可能感兴趣的:(redis-5大对象之---存储基础结构)