Redis底层数据结构

tech2023-07-13  127

非常好的文章

一、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)

最新回复(0)