Valkey 9.1 的哈希字段 TTL:把官方文档推荐的用法内存开销抬高了两倍
来源:dev.to — 2026-09-11
📋 概述
Valkey 9.0 允许给哈希里的单个字段设置 TTL,9.1 又加了 HSETEX,一次往返就能设好字段和过期时间;官方博客给的例子是按用户存鉴权 token,看上去可以无缝替代 SET user:123:auth_token ... EX 900。作者在单机 Docker 上对两万条数据做了对照实验:按文档写的「一 key 一 hash、一个字段带 TTL」占用 261 字节每 key,而不带 TTL 的 hash 与普通字符串加 EXPIRE 都只要 87 字节左右。给字段加 TTL 的代价几乎等同于把整个 hash 的编码从 listpack 换成 hashtable,是约三倍的内存回归;文档真正想要的「一个 hash 装多个字段」模式每字段只多约 23 字节。
🔑 核心要点
- 字段带 TTL 的写法每 key 占 261 字节,普通字符串加 EXPIRE 只需 86.68 字节。
- 加 TTL 的同时,hash 编码从 listpack 退化为 hashtable。
- 设计意图中的「一个 hash 装多个字段」每字段只多约 23 字节。
- 结论是「一 key 一 hash」这种文档示例本身就是昂贵用法。
💡 金句
Giving a single field a TTL costs almost exactly the same extra memory as switching the whole hash's encoding from listpack to hashtable.
👍 0
👎 0
← 返回 dev.to 首页