首页/数据/数据库速查/Hash vs String 存对象:选型对照
本包目录(495 条)
MySQL 基础与连接36 条SQL 语法52 条用户与权限21 条备份与恢复56 条主从复制与高可用53 条性能与调优57 条
Redis 命令96 条
Redis 运维与场景124 条

Hash vs String 存对象:选型对照

存对象用 Hash 可部分字段读写、按字段增减省内存;用 String 存序列化 JSON 适合整体读写与跨语言简单。选型看访问模式与过期粒度。

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

对比

维度HashString(JSON)
部分更新HINCRBY/HSET 单字段整体重写
内存小哈希紧凑(listpack)整体序列化含冗余
过期仅键级(7.4+ 才有字段级 HEXPIRE)键级
兼容需客户端支持字段操作任意语言都好处理

两种写法

两种写法
HSET user:1001 name 张三 age 30
HINCRBY user:1001 age 1
# String 方案:
SET user:1001:json '{"name":"张三","age":31}' EX 3600
高频只改一个字段(如计数、状态)用 Hash;需要整体 TTL 与简单序列化时 String 更省心。

易错点

  • Hash 无法给单个字段设过期(7.4 之前),会话状态按字段过期会失灵
  • 把大对象塞进单个 field:编码进 hashtable 后每字段额外开销不小

数据来源与参考

  • Redis 官方文档: Hashes
  • Redis 官方文档: 内存优化

相关工具

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