字符串对象

字符串对象的编码可以是int、raw、embstr。

int

如果一个字符串保存的是整数值,并且这个整数值可以用Long表示,那么字符串对象会被保存到RedisObject里的ptr属性里。
字符串对象

raw

如果字符串对象保存的是一个字符串值,并且这个字符串值的长度大于32字节,那么字符串对象将使用一个简单动态字符串(SDS)来保存这个字符串值,并将对象的编码设置为raw。会调用两次内存分配函数来分别创建redisObject结构和sdshdr结构
字符串对象

embstr

如果字符串对象保存的是一个字符串值,并且这个字符串值的长度小于等于32字节,那么字符串对象将使用embstr编码的方式来保存这个字符串值。embstr编码的字符串对象的所有数据都保存在一块连续的内存里面
字符串对象

embstr 最大存储容量计算方式

根据下面这张图可以算出,留给 content 的长度最多只有 45(64-19) 字节了。字符串又是以\0结尾,所以 embstr 最大能容纳的字符串长度就是 44。

字符串对象