5种数据结构:
String:简单的KV存储;
Hash:存结构化数据;
List:有序列表,可以做为消息队列,可以实现区间查询;
Set:无序集合,自动去重;
ZSet:排序后的Set;
基础知识:
Ziplist
- 压缩列表,redis特有数据结构,list、hash、zset底层数据结构,在元素个数 小于某个值时,数据结构会变成ziplist;
- 为什么压缩列表节省内存?
- 记录了每个数据的大小,即偏移量,通过偏移量来取下一个数据,省去了碎片空间,并且省去了头尾指针,共16字节;
List:
- list底层是压缩列表(数量小时)+ 双向链表(LinkedList)
ZSet:
- zset底层是压缩列表(数据量小时)+ 字典(Dict)和跳表;
- 字典的作用是存储member到score的映射;
- 跳表根据score的大小来给数据排序;
- 为什么用跳表不用红黑树,区别是什么?
- 跳表相对于红黑树需要更多的存储空间来储存跳跃查询结构;
- 红黑树不支持范围查询,zset需要支持范围查询(主要原因);
- 跳表是有序双向链表的升级;