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

redis3.2之前版本的 sdshdr 结构是用4字节的无符号int存储字符串长度,此时因为长度限制,最大只能存储512M的字符串。

struct sdshdr {
    int len;
    int free;
    char buf[];
};

redis3.2版本新增了 sdshdr64 结构,采用8字节无符号 uint64_t 来存储字符串长度,理论上该值完全可以突破512M了。

struct __attribute__ ((__packed__)) sdshdr64 {
    uint64_t len;
    uint64_t alloc; 
    unsigned char flags;
    char buf[];
};

所以,sdshdr64类型,存储字符串的理论长度可以突破512M吗?
若不能,那什么情况下会用到 sdshdr64 结构呢?

阅读 3.1k
2 个回答

是的,就是为了支持更长的字符串所以才有了 sdshdr64。而且为了节省空间也不是都一股脑全用 sdshdr64 存,而是根据字符串长度来决定用 sdshdr8sdshdr16sdshdr32 还是 sdshdr64

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题