标签归档:redis

Redis sdshdr字符串结构优点

Redis里面使用sdshdr结构体来保存字符串,结构体结构如下:

struct sdshdr{
    int len;//已使用保存的字符串长度
    int free;//未使用字符串长度
    char buf[];保存字符串的数组
}

redis_sdshdr.png

这里test字符串保存到buf数组中,“\0”表示字符串结束标志,len表示字符长度,free表示未使用空间为0

redis_sdshdr2.png

这里我们也是存了test数组,不过buf却有多余的空间,这个free=2表示的就是这个多余的空间,下面说下redis 使用sdshdr结构体的好处。

  1. 获取字符串长度快到极致,直接读取len

  2. 防止缓冲区溢出,因为可以读取len判断是否溢出

  3. 减少内存重分配次数通过free来预分配和惰性释放

  4. 二进制安全(防止\0过滤)

  5. 兼容部分c字符串函数stirng.h