首页/数据/数据库速查/键与值的内存设计(省内存实战)
Redis 运维与场景124 条

键与值的内存设计(省内存实战)

同样的数据不同的内存:短键名、整数编码、小哈希 listpack、分桶控制单键大小、压缩序列化——省下来的是真金白银。

数据库速查数据更新于 2026-10-12
  • 键名用命名空间缩写但在文档中登记:u:1001:pv 而不是 user:1001:pageview
  • 写密集计数用 Hash 聚合(hincrby 多字段),别每个计数一个键
  • 批量小对象用 Hash listpack(字段数 <128、值 <64B)
  • 大文本压缩(gzip/lz4)后存储,注意 CPU 与解压开销
  • 统一 value 尺寸,减少分配器尺寸类碎片
  • 控制单键上限:Hash >1 万字段、List >10 万元素就该拆分

编码验证

编码验证
HSET cfg a 1 b 2 c 3
OBJECT ENCODING cfg     # listpack
MEMORY USAGE cfg        # 精确看这个键花多少
# 超阈值后对比:
OBJECT ENCODING cfg     # hashtable
内存优化前先用 MEMORY USAGE 与 --memkeys 量化,改完再量化对比;盲目优化键名可读性会拖累排障。

易错点

  • 为省内存把键名压到 2-3 个字符又没文档:排障时全靠猜
  • 压缩大 value 后忘记评估解压 CPU:省内存换来 CPU 爆

数据来源与参考

  • Redis 官方文档: 内存优化
  • Redis 官方文档: OBJECT ENCODING

相关工具

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