首页/数据/Redis 进阶速查/Hash 编码:listpack 与 hashtable 切换
数据结构与选型42 条

Hash 编码:listpack 与 hashtable 切换

少量字段的 Hash 用 listpack 紧凑保存,超过 hash-max-listpack-entries(默认 128)或单字段超过 64 字节即转 hashtable,内存与查询特性随之变化。

Redis 进阶速查数据更新于 2026-10-12
编码listpack → hashtable
阈值配置hash-max-listpack-entries / hash-max-listpack-value
查看OBJECT ENCODING key

示例

示例
redis-cli HSET user:1 name alice age 30
redis-cli OBJECT ENCODING user:1
redis-cli CONFIG GET hash-max-listpack-entries
redis-cli CONFIG GET hash-max-listpack-value
7.0 起配置项由 ziplist 命名改为 listpack 命名(旧名保留为别名),升级后配置文件里两种写法都能识别。

易错点

  • 编码升级是单向的:转成 hashtable 后即使删到只剩一个字段也不会退回 listpack
  • 阈值调大能让更多键保持紧凑编码,但单个键包含的元素越多,批量操作时的单线程阻塞时间越长

数据来源与参考

  • Redis 官方文档:Hashes 数据类型
  • Redis 7.0 配置文件 redis.conf 注释
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌