redis 数据结构与对象

69 阅读1分钟
  • redis字符串:简单动态字符串;二进制字节数组存储,二进制安全;兼容部分C库函数
  • redis链表的特性:
  1. 双端链表,无环,带表头指针和表尾指针,带链表长度计数器。
  2. 多态,链表节点使用void *来保存节点值,并且可以通过list结构的dup,free,match三个属性为节点值设置类型特定函数,所以链表可以用于保存各种类型不同的值。
  • redis 的字典使用哈希表作为底层实现。哈希表,指针数组,形成类似vector的结构。字典里含有两个hashtable,一个作为平时使用,一个作为rehash时使用。(murmur哈希算法),链地址解决地址冲突,采用头插法O(1)。

  • 随着操作的不断执行,哈希表保存的键值对会逐渐的增多或减少,为了让负载因子维持在一个合理的范围之内,当哈希表保存的键值对数量太多或者太少,程序要对哈希表的大小进行相应的扩展或者收缩。

  •  渐进式rehash。当哈希表里存储的键值对很多,一次性rehash操作的话会影响性能,所以采用渐进式rehash。 分摊时间复杂度。

     

  • 整数集合,数组实现,这个数组以有序,无重复的方式保存集合元素,在有需要时,程序会根据新添加元素的类型,改变这个数组的类型。升级操作为整数集合带来了操作上的灵活性,并且尽可能的节约了内存。整数集合只支持升级操作,不支持降级操作。

  • 压缩列表