第一节:字符串-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、连锁更新:每个节点都会存取前一个节点的长度,如果存长度的地方不够存了,就会导致当前节点扩容,后续发生连锁扩容,导致效率低下。但这种情况下的几率很低