首页/数据/Redis 进阶速查/版本演进中的内存相关变化
内存与管理99 条

版本演进中的内存相关变化

Redis 7.0 起 hash 与 zset 的紧凑编码由 ziplist 改为 listpack,相关配置名从 *-max-ziplist-* 变为 *-max-listpack-*;升级前核对配置迁移。

Redis 进阶速查数据更新于 2026-10-13

ziplist 与 listpack 的交替

Redis 7.0 把小集合的紧凑编码从 ziplist 换成 listpack:hash、zset、list 在小数据量下不再返回 ziplist,OBJECT ENCODING 会显示 listpack,对应的配置项也从 *-max-ziplist-* 改名为 *-max-listpack-*。旧配置文件里的旧参数名在新版本不生效(启动时对未知参数会有告警),阈值会静默回到默认值,这是升级后内存表现发生变化的常见原因。编码类型还直接影响单键内存开销,升级评估不能只看阈值数字相同就认为表现一致。

基本信息

变化版本Redis 7.0 起
影响类型hash / zset / list
hash 改名hash-max-ziplist-entries 变为 hash-max-listpack-entries
zset 改名zset-max-ziplist-* 变为 zset-max-listpack-*
list 改名list-max-ziplist-size 变为 list-max-listpack-size
编码标识OBJECT ENCODING 返回 listpack
核对方式升级后用 CONFIG GET 验证生效值

升级清单里的核对项

  • 配置文件中的旧参数名是否已替换,未替换的阈值等于回默认
  • 业务是否依赖 OBJECT ENCODING 的返回值,监控脚本与测试断言常踩
  • 压测与容量结论是否基于旧编码,需要重跑关键场景
  • 哨兵、集群与运维脚本中是否有硬编码的旧配置项名
  • 升级后一周内对比 used_memory 与键数增长曲线,确认无异常抬升
  • 回滚预案要写清楚:配置项名变化意味着回滚时参数得改回来
  • 升级后重新校准内存水位告警,编码变化会改变曲线形状
  • 确认客户端驱动版本能正确解析新版本返回的字段,避免解析缺失被误判为故障

核对生效值

核对生效值
redis-cli INFO server | grep -E 'redis_version'      # 先确认版本
redis-cli CONFIG GET hash-max-listpack-entries       # 7.0 起的新名称
redis-cli CONFIG GET hash-max-ziplist-entries        # 旧名在新版本无返回
redis-cli CONFIG GET zset-max-listpack-entries
redis-cli CONFIG GET list-max-listpack-size
redis-cli OBJECT ENCODING myhash                     # 期望看到 listpack
redis-cli MEMORY USAGE myhash                        # 对比同规模键的开销变化
redis-cli DBSIZE                                     # 结合键数看总量曲线

编码与参数对照

旧版本7.0 起影响
ziplistlistpackOBJECT ENCODING 返回值变化
hash-max-ziplist-entrieshash-max-listpack-entries阈值未改名则不生效
zset-max-ziplist-valuezset-max-listpack-value大成员判定阈值
list-max-ziplist-sizelist-max-listpack-sizequicklist 节点容量
listpack 与 ziplist 的内存占用与比较方式都不同,阈值一致不代表内存表现一致,升级评估要重跑真实数据样本。
旧客户端与运维脚本一般不关心编码名,但断言编码、按编码估算内存的脚本要一起改动,否则会得到错误结论。
集群或哨兵场景下逐节点核对参数比抽查一台可靠:滚动升级期间新旧版本与新旧配置会短暂并存。

易错点

  • 沿用旧配置名导致阈值实际回默认,小对象直接变大对象编码,内存明显抬升
  • 监控脚本仍按 ziplist 匹配编码,告警与报表字段长期为空
  • 照搬旧版本的容量结论做采购预算,实际单键开销已变化
  • 升级后不做回归压测,等到内存告警才发现差异
  • 回滚时未同步还原配置项名,参数在旧版本上同样失效

数据来源与参考

  • Redis 官方文档:版本升级说明
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌