Redis3.2新增了sdshdr64 结构,存储字符串的理论长度可以突破512M吗?

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 存,而是根据字符串长度来决定用 sdshdr8sdshdr16sdshdr32 还是 sdshdr64


回答:

你什么情况需要在redis下存储一个512M的数据.不管出于什么需求,这种做法都不会是最优解吧

以上是 Redis3.2新增了sdshdr64 结构,存储字符串的理论长度可以突破512M吗? 的全部内容, 来源链接: utcz.com/qa/257086.html

回到顶部