一、String
SDS:
- 字符可修改
- 预分配机制,避免频繁复配
- 计算length只需要O(1)
- 可以存储二进制数据
二、hash
数据少:ziplist
- 内存利用率特别高,因为他是一个内存连续的,但是插入十分麻烦
数据多:dict
-非常想java8的hashMap,但是他的渐进式hash思想非常优雅
三、list
quicklist:
-本身是个普通的双链表,但是每个实体确实个ziplist。算是综合双链表和ziplist的优点
四、set
redis的集合对象set的底层存储结构特别神奇,我估计一般人想象不到,底层使用了intset和hashtable两种数据结构存储的,intset我们可以理解为数组,hashtable就是普通的哈希表(key为set的值,value为null)。
set的底层存储intset和hashtable是存在编码转换的,使用intset存储必须满足下面两个条件,否则使用hashtable,条件如下:
结合对象保存的所有元素都是整数值
集合对象保存的元素数量不超过512个
四、sort set
ziplist:可以实现O(logn)