首页/数据/数据库速查/String 的 512MB 上限与二进制安全
Redis 命令96 条

String 的 512MB 上限与二进制安全

单个 String 最大 512MB;二进制安全意味着可存序列化对象、图片、压缩包,但大 value 会放大复制、持久化与迁移成本。

数据库速查数据更新于 2026-10-13

String 的大小上限

单个 String 最大 512MB,这是所有数据类型共享的单值上限。String 是二进制安全的,可以存放序列化的对象、图片或压缩包,但大 value 会同时放大复制流量、持久化时间与过期删除的阻塞程度,因此实际使用中应当把 value 控制在 KB 级。

基本信息

适用Redis 全版本,String 类型
上限单键 512MB,所有数据类型共享该限制
二进制安全可以包含空字符与任意字节
建议value 控制在 KB 级,多数场景小于 100KB

容量自查

容量自查
SET bigdata "..."                    # 接近上限会报错:string exceeds maximum allowed size
STRLEN bigdata                      # 字节长度
MEMORY USAGE bigdata                # 单键实际内存占用(字节)
GETRANGE bigdata 0 99               # 只取前 100 字节,避免整值拉取
OBJECT ENCODING bigdata             # 小值为 embstr,大值转 raw
redis-cli --bigkeys                 # 采样扫描,定位实例中的大 key

长度与内存口径

指标口径注意
STRLEN值的字节长度不是字符数,中文按 UTF-8 占 3 字节
MEMORY USAGE键的完整内存占用包含结构开销,比 STRLEN 更贴近实际
512MB单值上限达到上限时写入直接报错
OBJECT ENCODING内部编码embstr 与 raw 影响内存与复制效率
大 key 采样redis-cli --bigkeys采样有开销,建议低峰或从库执行

典型使用场景

  • 缓存序列化对象:value 应控制在合理大小
  • 会话数据存储:注意单键体积随会话内容膨胀
  • 计数器与标志位:小值场景,内存开销可忽略
  • 大文件或图片:改用对象存储并把 URL 放进 Redis
  • 排查大 key:用 MEMORY USAGE 逐键确认并拆分
大 value 是 Redis 的典型反模式:删除与过期时释放缓慢、主从复制出现网络抖动、RDB 快照写入变慢,通常应改为拆片或放到对象存储。
单值上限对集合类同样适用:List、Hash、Set 的单个元素或字段值也受该上限约束,超限时同样直接报错。

大 key 治理动作

  • 定期用采样命令统计大 key,形成台账而不是临时排查
  • 按业务主键或时间维度拆分,把单键体积压回合理区间
  • 非结构化的大内容改用对象存储,Redis 只保留索引与访问地址
  • 治理前后都用 MEMORY USAGE 对比,确认体积确实下降

易错点

  • 把几百 MB 的二进制塞进单键:过期删除时阻塞主线程,监控上表现为周期性卡顿
  • 用 STRLEN 估算内存:字符串对象还有额外开销,实际占用要看 MEMORY USAGE
  • 用 GET 拉取大 value 做局部读取:应改用 GETRANGE 只取需要的片段
  • 把大文件长期放在 Redis:复制、持久化与迁移都会因此变慢,对象存储更合适

数据来源与参考

  • Redis 官方文档: Redis 数据类型(String 上限)
  • Redis 官方文档: MEMORY USAGE

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌