- 冲突避免:拉链法
- 数组扩容:延迟rehash操作,每次复制一个bucket,一般是从h[0]复制给h[1],赋值完之后h[1]在赋值给h[0].
- string长度小于44的可以用嵌入式string,可以将stringobjct和sds分配在一起,只需要一次内存分配,超过44的需要一次分配stringobject和ssd。
- ssd设计可以减少len和拼接的开销,也可以存储'/0'字符。
- 压缩链表可以按照不同的数据进行不同编码存储,节省内存空间。
- intset,整型集合,是set的底层数据结构,如何实现set去重呢,intset中的数组是有序数组,重复则不插入,插入新值会涉及到数组移动。
typedef struct intset { uint32_t encoding; uint32_t length; int8_t contents[]; } intset;- 节省内存的数据访问,设置共享对象节省内存。