目录
一.底层数据结构
1.动态字符串

缺点:
1.字符串长度需要做运算:需要遍历,需要运算
2.非二进制安全:\0表示结束,万一我们在数组中就有这个\0 导致出现问题
3.不可修改:"字面值"放在常量池中,无法修改

有\0也不会停止,知道字符串长度会读完为止。
动态扩容

2.IntSet






有序:是通过二分查找来完成的
**唯一:**做判断
3.Dict(字典)


当我们的元素越来越多,导致链表过长,怎么办?
rehash







4.ZipList
1.介绍
Dict会产生内存碎片,而且大量的指针会占用大量的内存。所以就引出ziplist。它是一片连续的内存空间,而且没有指针。

那么又没有指针,而且每个entry占的大小又不一样,它是如何找到每个entry的呢?

2.ziplist连锁更新问题

比如说现在出现了一个大于254字节的数据

每一个节点要记录前一个的字节大小,本来后一个本来是够的,结果不够了,就得不断的向后迁移,每一个后面的节点都得如此。

5.QuickList


6.SkipList(跳表)
ziplist和quicklist都是查头尾元素很快,但找中间的元素就很慢需要遍历。
skiplist有点像mysql中的索引,数据挂在索引下面。


6.RedisObject

二.五种数据结构
1.String
1.RAW编码方式

2.EMBSTR编码

3.INT编码

4.总结

2.List
首尾操作。


3.Set(好友共同关注)



4.ZSet(排行榜)
同时具备两种数据结构


功能很强大,太占用内存了。怎么办呢?

