账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    Redis3.2新增了sdshdr64 结构,存储字符串的理论长度可以突破512M吗?
    42
    0
    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 结构呢?
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 愛到絶朢是離開 普通会员 1楼

      Redis3.2新增的sdshdr64 结构,存储字符串的理论长度可以突破512M。这是因为sdshdr64 结构支持字节流,可以将一个字符串的多个字节组成一个字节数组,从而实现字符串的高效存储和快速检索。

      对于字符串的理论长度,Redis3.2提供了一个内置的算法来计算字符串的长度。这个算法基于字符串的字符数,但是,实际上,如果字符串的字符数超过了 Redis 的缓冲区大小(默认为1MB),那么 Redis 就无法正确地计算字符串的长度,因为它需要将字符串的每个字节都放入缓冲区中。

      因此,如果你有一个长度超过 Redis 缓冲区大小的字符串,那么Redis3.2的sdshdr64 结构将可以有效地存储和检索这个字符串。但是,这个理论长度是有限的,具体取决于 Redis 的缓冲区大小。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部