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

背景:

今天接手旧的代码时,看到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
    评论
Redis常用的数据结构有六种,分别是简单动态字符串(SDS)、链表、字典、跳跃表、整数集合和压缩列表。这些数据结构被用来构建Redis的对象系统,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。每种对象都有多种不同的数据结构实现,以适应不同的应用场景。字符串类型是Redis最基础的数据结构,它的值可以是简单的字符串、复杂的字符串(如JSON、XML)、数字(整数、浮点数)甚至二进制数据(如图片、音频、视频),但值的大小不能超过512MB。Redis中的字符串是动态字符串,可以通过预分配冗余空间的方式减少内存分配的频率。字符串的长度不超过1MB时,扩容时会加倍现有的空间;而超过1MB时,每次扩容只会增加1MB的空间。需要注意的是,Redis规定字符串的长度不能超过512MB。123 #### 引用[.reference_title] - *1* [Redis常见数据结构](https://blog.csdn.net/weixin_42348609/article/details/102996982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *2* [Redis-常用数据结构](https://blog.csdn.net/Huangjiazhen711/article/details/127567141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] - *3* [Redis的五种基础数据结构](https://blog.csdn.net/yuyuanlai/article/details/106745757)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值