天地维杰网

人如秋鸿来有信,事若春梦了无痕


  • 首页

  • Redis

  • java

  • linux

  • 日常问题

  • Spring和Springboot

  • Mac相关

  • 中间件

  • 架构

  • python

  • 前端

  • jvm

  • c语言

  • web3

  • 归档

  • 关于

  • 搜索
close

为什么redis的SDS的最大长度限制为512mb

时间: 2022-11-08   |   分类: redis     |   原创   |   阅读: 340 字 ~1分钟

面试里常会问到redis sds的最大长度是多少,通常统一的回答是512M,但这个512M是拿来的?

当客户端操作 client 时,一般不会直接使用 sds ,而是通过对象的方式来使用。比如创建的字符串其实是一个对象,间接使用到了 sds 结构。限制 512M 的逻辑在 t_string.c 的 checkStringLength 方法。

在redis3.2.13、redis4.0.14、redis5.0.9版本里面的的一个方法,checkStringLength里面写死了限制512*1024*1024,这个方法常在 SET/HSET的时候被调用。

static int checkStringLength(client *c, long long size) {
    if (size > 512*1024*1024) {
        addReplyError(c,"string exceeds maximum allowed size (512MB)");
        return C_ERR;
    }
    return C_OK;
}

而在redis6.2.7版本里面,这个长度已经改为读取配置 proto-max-bulk-len的长度了。

static int checkStringLength(client *c, long long size) {
    if (!(c->flags & CLIENT_MASTER) && size > server.proto_max_bulk_len) {
        addReplyError(c,"string exceeds maximum allowed size (proto-max-bulk-len)");
        return C_ERR;
    }
    return C_OK;
}

参考文档:

https://machbbs.com/v2ex/502001

https://github.com/redis/redis/pull/4633

https://machbbs.com/v2ex/502001

https://github.com/redis/redis/issues/7354

#redis# #code# #server# #sds#
Redis源码阅读02-数据结构sds
分布式AKF拆分原则
  • 文章目录
  • 站点概览
不与天斗Domino

不与天斗Domino

Programmer & Architect

183 日志
15 分类
224 标签
© 2013 - 2023 天地维杰网 京ICP备13019191号-1
Powered by - Hugo v0.63.2
Theme by - NexT
0%