非常好的文章
一、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)