首页/数据/数据库速查/Hash 编码(listpack / hashtable)与内存优化
Redis 命令96 条

Hash 编码(listpack / hashtable)与内存优化

小 Hash 用 listpack(7.0 前叫 ziplist)紧凑存储,超阈值转 hashtable;阈值由 hash-max-listpack-entries(默认 128)与 hash-max-listpack-value(默认 64)控制。

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

查看与阈值

查看与阈值
HSET h f1 v1
OBJECT ENCODING h      # listpack
CONFIG GET hash-max-listpack-entries   # 128
CONFIG GET hash-max-listpack-value     # 64
# 加一个超 64 字节的值后:
HSET h big $(python3 -c "print('a'*100)")
OBJECT ENCODING h      # hashtable(一旦超过不可逆)
listpack小字段集,内存紧凑
hashtable大字段集,读写 O(1) 均摊
阈值hash-max-listpack-entries / hash-max-listpack-value
编码转换不可逆:设计时把字段数与 value 大小控制在阈值内,能省大量内存;超了也不会错,只是内存开销上升。

易错点

  • 以为 listpack 是哈希表:小 Hash 的查找是线性扫描,字段数接近阈值时单键操作会变慢
  • 忘记哈希阈值改动需要 CONFIG SET 后新写入才重新评估,老键不会自动转换回去

数据来源与参考

  • Redis 官方文档: OBJECT ENCODING
  • Redis 官方文档: Redis 配置(hash-max-listpack-*)

相关工具

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