首页/数据/Redis 进阶速查/对象缓存:String 存 JSON 与 Hash 的取舍
本包目录(421 条)
数据结构与选型42 条
持久化56 条主从与哨兵51 条Cluster 集群44 条内存与管理99 条性能与排障129 条

对象缓存:String 存 JSON 与 Hash 的取舍

整对象读写用 String 加 JSON 简单直接;需要频繁更新单字段或字段级原子递增时用 Hash,避免每次读改写整个序列化对象。

Redis 进阶速查数据更新于 2026-10-12

两种存法对比

维度String + JSONHash 字段
整对象读取一次 GET,解析在客户端HGETALL 取全部字段
单字段更新需要读改写整条HSET 直接改一个字段
部分字段过期不支持7.0 起支持 HEXPIRE 按字段过期
内存序列化体积大则偏高小对象 listpack 更紧凑

示例

示例
redis-cli SET user:1001 '{"name":"alice","age":30}'
redis-cli HSET user:1002 name alice age 30
redis-cli HMGET user:1002 name age
redis-cli HSET user:1002 age 31
字段级原子更新用 HINCRBY、HSETNX;追求简单时 JSON 加客户端压缩也是常见方案。

易错点

  • Hash 字段很少时逐个字段读回往返更多,别把每个字段都做成独立 key
  • String 存 JSON 时并发更新有两个写者互相覆盖的风险

数据来源与参考

  • Redis 官方文档:Hashes 数据类型
  • Redis 官方文档:HINCRBY / HSETNX 命令
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌