Redis3.2新增了sdshdr64 结构,存储字符串的理论长度可以突破512M吗?
redis3.2之前版本的 sdshdr 结构是用4字节的无符号int存储字符串长度,此时因为长度限制,最大只能存储512M的字符串。
struct sdshdr { int len;
int free;
char buf[];
};
redis3.2版本新增了 sdshdr64 结构,采用8字节无符号 uint64_t 来存储字符串长度" title="字符串长度">字符串长度,理论上该值完全可以突破512M了。
struct __attribute__ ((__packed__)) sdshdr64 { uint64_t len;
uint64_t alloc;
unsigned char flags;
char buf[];
};
所以,sdshdr64类型,存储字符串的理论长度可以突破512M吗?
若不能,那什么情况下会用到 sdshdr64 结构呢?
回答:
是的,就是为了支持更长的字符串所以才有了 sdshdr64
。而且为了节省空间也不是都一股脑全用 sdshdr64
存,而是根据字符串长度来决定用 sdshdr8
、sdshdr16
、sdshdr32
还是 sdshdr64
。
回答:
你什么情况需要在redis下存储一个512M的数据.不管出于什么需求,这种做法都不会是最优解吧
以上是 Redis3.2新增了sdshdr64 结构,存储字符串的理论长度可以突破512M吗? 的全部内容, 来源链接: utcz.com/qa/257086.html