redis数据结构之字符串
string三种内部编码 int ,embstr,raw
int 当一个key的value是整形时候、Redis后悔将编码为int类型 如果吧value当做字符串来看的时候 长度不能超过20 保存为long
enbstr 保存长度小于44字节 分版本
raw 保存长度大于44字节的字符串 分版本
int 保存整数 raw保存长字符串 embstr 短字符串
raw 使用的是redisobject和sds保存数据
redis保存浮点数是字符串保存的 需要的时候再转成浮点数
当int编码保存的不再是整数的时候 或者超出了long的范围 那么自动转成raw
![](https://i-blog.csdnimg.cn/blog_migrate/46b4a09b41e5911558815cef8b386b91.png)
redis的string 是redis最简单的数据类型 key - value
simple dynamic string SDS
struct sdshdr {
int len
int free
car buf []
}
举例
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4a26cdb59b72bd7f6a95bb1d3e9092a9.png)
c语言的 /0 是结束符
SDS 存储在第一次存储字符串的时候 比如 Hello Word 记录这个字节长度为len 未分配字节为0
如果进行修改变成 Hello Word1 如果小于1Mb 那么程序会分配之前第一次存入的未使用空间 也就是 10 + 10 +1(/0) = 11
修改之后大于1Mb 那么直接分配1Mb
惰性空间释放 如果分配之后没有都进行使用 那么free只会记录 留待将来使用