Redis常用数据类型能支持的最大长度

Redis的字符串类型key最大支持512M,但并非由内部结构限制,而是考虑到内存管理和位操作性能。Set、List、Hash等结构可容纳约42亿个元素,每个元素也可达512M。限制在于避免内存过度增长和保证原子性的Dump操作。
摘要由CSDN通过智能技术生成

背景:

今天接手旧的代码时,看到redis中的一个字符串类型的key的value的长度是200M,把我吓到了,这篇文章就是整理下redis常用的结构支持的最大长度

技术细节:

1.无论哪一种redis结构,他们的key都是字符串类型,而字符串类型目前Redis支持的最大长度是512M。

2.对于Set,List,Hash等Redis结构,他们可以容纳的最大元素个数是2^32-1个,也就是大概42亿个,每个元素支持的最大长度是512M

疑问:为什么字符串类型的长度最大只能支持512M?

struct sdshdr {

// buf 已占用长度
int len;

// buf 剩余可用长度
int free;

// 实际保存字符串数据的地方
char buf[];

};

其实从Redis内部保存字符串的结构上来说,并没有限定只能存储512M的字节长度,参见大神的解释:https://github.com/redis/redis/issues/757,
最大的问题是在于增加到更大长度后每个字符串都要新增8个字节的长度来保存,会导致redis内存占用增大,以及Dump等命令的原子性问题.

此外,对于位操作来说,由于512MB正好对应着32位整数的bit位,对bit位进行与或非操作时只需要一条命令即可,所以约束value的最大长度是512MB也是为了bit操作的性能起见

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值