redis设计与实现笔记(一)

字符串

Redis的字符串用的是自己构建的字符串,称作SDS(简单动态字符串),除了用于保存数据库中的字符串以外,SDS还被用作缓冲区。

定义

  • free代表是否分配空间
  • len代表长度
  • buf是char数组

获取Redis的SDS的长度为O(1)复杂度

长度

当SDS长度即将溢出的时候,会自动扩容。类似vector,SDS会进行空间额预分配,当SDSDE长度小于1MB的时候,预分配1倍的空间,大于1MB的时候,预分配会多分配1MB。

惰性空间释放

缩短SDS的时候,程序不会回收字节,而是仅做一下标记,增长free字段的长度。

二进制安全

SDS所有的API都会以处理二进制的方式来处理存放在buf数组里的数据,不会做限制。

和C的主要区别

字典

Redis中的字典是哈希表,