1.1. redis数据结构-SDS(simple dymatic string)

126 阅读1分钟

redis 没有使用 c语言的字符串作为底层字符串的时候,而是通过构造了一个SDS的简单动态字符串数据结构

结构

长度空闲字节数字节数组
int lenint freechar buf[]
  • len 表示当前字符串的长度
  • free 表示ptr所指向的的底层字节数组还有多少空闲字数
  • char[] 指向一个字节数组,并且在实际的字节数后面始终加上一个\0.这样做的好处是可以复用c标准库的字符串函数.

tips

  1. len长度不包括结尾的\0.所以实际总长度为len+free+1(\0的大小)
  2. 虽然称为简单动态字符串,但是实际上不仅仅是存储字符串.可以存储任何二进制数据. 此时当底层存储的是二机制数据时,使用标准的字符串函数可能会出现错误.
  3. SDS可以动态的扩展和缩减.类似于java的arraylist.
    • 扩展方式为当扩展后的len小于1m的时候,扩展后,free=len.否则free=1m.例如.当len=100,free=10的时候,此时需要再append 100个字节的时候,len=100+100=200,free=200.总共需要新增190个字节. 当扩展后的len大于1m时,扩展后的free始终为1m.