字符串: SDS
list: 元素少且小 👉🏿 ziplist , 元素多且大 👉🏿 双链表
hash: 元素少且小 👉🏿 ziplist , 元素多且大 👉🏿 hashtable
zset: 元素少且小 👉🏿 ziplist , 元素多且大 👉🏿 skiplist
set: 元素少且小 👉🏿 intset , 元素多且大 👉🏿 hashtable
redis的hashtable使用拉链法解决冲突
什么是跳跃表?
跳表是一种带多级索引的链表。
有序链表
能以log(n)的时间复杂实现查找,但是空间复杂度是O(n),也就是说,如果将包含 n 个结点的单链表构造成跳表,我们需要额外再用接近 n 个结点的存储空间。
为什么使用压缩ziplist?
答:相较于双链表,节省了两个指针的空间。(pre_entry_length
前驱数据项的大小。因为不用描述前驱的数据类型,描述较为简单)。相较于数组,ziplist
的每个entry
所占的内存大小可以不同,便于节省空间。
为什么list
hash
zset
在数据量大的时候不再使用ziplist?
答:难以获得大的连续的内存空间。
评论