在Redis 7.0中如何配置各类数据类型底层结构的内存转换阈值

酷浩吖_4851

酷浩吖_4851

2026-09-19

301人浏览

原创

redis 7.0 中 hash 使用 listpack 的触发条件是:字段数 ≤ hash-max-listpack-entries(默认512)且所有 field 和 value 长度 ≤ hash-max-listpack-value(默认64),二者必须同时满足,否则升级为 hashtable。

在redis 7.0中如何配置各类数据类型底层结构的内存转换阈值

Redis 7.0 中 Hash 使用 listpack 的触发条件

Redis 7.0 已完全弃用 ziplist,改用更安全、更易维护的 listpack 作为小 Hash 的紧凑编码。是否启用 listpack 取决于两个运行时阈值,且必须**同时满足**:

  • hash-max-listpack-entries:字段对(field-value)总数 ≤ 该值(默认 512
  • hash-max-listpack-value:每个 field 和每个 value 的字符串长度都 ≤ 该值(默认 64

注意:listpack 是只读优化结构,一旦执行 HSET 修改任意字段值(哪怕只是追加一个字符),只要新值超长或总数量超标,整个 Hash 就会**不可逆地升级为 hashtable**。所以别指望“改小一点再切回去”。

List 和 ZSet 的 listpack 阈值配置差异

虽然 listpack 同时用于 List 和 ZSet 的紧凑存储,但它们的控制参数名和默认值不同,容易混淆:

  • List 不再有独立的 listpack 阈值——它底层统一是 quicklist,而 quicklist 内部的每个节点才是 listpack;真正控制单个 listpack 大小的是 list-max-listpack-size(Redis 7.0+ 新增,旧版叫 list-max-ziplist-size),默认值为 -2(表示每个 listpack 最多存 8KB 数据)
  • ZSet 的 listpack 触发由两个独立参数控制:zset-max-listpack-entries(默认 128)和 zset-max-listpack-value(默认 64),含义与 Hash 类似,但阈值更保守——ZSet 对查询性能更敏感,所以更早退化到 skiplist + dict

修改时务必确认命令拼写:zset-max-listpack-value 不能写成 zset-max-ziplist-value,后者在 Redis 7.0+ 已被忽略且不会报错,只会静默失效。

如何实时验证当前 key 的实际编码类型

光改配置没用,得确认你的数据真走到了 listpack 路径上。最直接的方法是用 OBJECT ENCODING 命令:

Redis Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。

下载
127.0.0.1:6379> HSET myhash f1 "a" f2 "bb" f3 "ccc"
(integer) 3
127.0.0.1:6379> OBJECT ENCODING myhash
"listpack"

常见返回值含义:

  • "listpack":当前处于紧凑编码(Redis 7.0+)
  • "hashtable":已升级,无法降级
  • "quicklist":List 类型的统一编码,不代表内部一定是 listpack(需结合 DEBUG OBJECT 看节点细节)
  • "skiplist":ZSet 已退化,说明至少有一个 member 超过 zset-max-listpack-value 或总数量超限

注意:OBJECT ENCODING 返回的是顶层结构类型,不是内存布局快照。如果刚插入一个大 value 导致升级,它立刻返回 "hashtable",但旧数据还在原内存块里,直到下次写操作才真正迁移。

配置修改后不生效的三个高频原因

改了 redis.conf 却发现数据还是 hashtable?大概率卡在这三处:

  • 配置项写错命名:Redis 7.0+ 所有 listpack 相关参数都带 -listpack-,如 hash-max-listpack-entries;保留的 -ziplist- 形式参数(如 hash-max-ziplist-entries)**完全无效**,但 Redis 不报错也不警告
  • 未重启或未 CONFIG REWRITE:仅 CONFIG SET 是临时生效,进程重启后还原;若用 CONFIG SET 修改,记得后续执行 CONFIG REWRITE 持久化到配置文件,否则下次启动仍按旧值加载
  • 已有 key 不受新配置影响:阈值只作用于**新创建或新写入的 key**。一个已存在且是 hashtable 编码的 Hash,无论你怎么调低 hash-max-listpack-entries,它都不会自动缩回 listpack —— 这是设计使然,不是 bug

真正要压测效果,得清空 DB 或用全新 key 重跑数据流,别拿老 key 测新配置。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

redis

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据类型有哪几种
数据类型有哪几种

数据类型有整型、浮点型、字符型、字符串型、布尔型、数组、结构体和枚举等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.31

2271

5

php数据类型
php数据类型

本专题整合了php数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2025.10.31

474

9

c语言 数据类型
c语言 数据类型

本专题整合了c语言数据类型相关内容,阅读专题下面的文章了解更多详细内容。

2026.02.12

402

19

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

3969

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3435

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6072

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

583

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

696

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

5422

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
phpEnv手册
phpEnv手册

共0课时 | 0人学习

进程与SOCKET
进程与SOCKET

共6课时 | 0.5万人学习