Redis 哈希(Hash)
Hash 存对象字段,比把对象 JSON 塞进 String 更灵活。
Key PointsHash 适合存对象:可单独读写某个字段,不用整体序列化。
读写字段
Shell
HSET user:1 name "alice" age 29 city "BJ"
HGET user:1 name
HGETALL user:1
HINCRBY user:1 age 1 # 字段原子 +1
HMGET user:1 name ageOutput
1) "name"
2) "alice"
3) "age"
4) "29"
5) "city"
6) "BJ"Hash vs String
| 方案 | 优点 | 缺点 |
|---|---|---|
| String 存 JSON | 整体读写简单 | 改一个字段要整取整写 |
| Hash | 可单独改字段、省带宽 | 不能对整体设过期 |
A Hash field cannot itself be a Hash (no nesting). To expire, set EXPIRE on the Hash key — expiration is per-key regardless of internal structure.
读写字段
Shell
HSET user:1 name "alice" age 29 city "BJ"
HGET user:1 name
HGETALL user:1
HINCRBY user:1 age 1 # 字段原子 +1
HMGET user:1 name ageOutput
1) "name"
2) "alice"
3) "age"
4) "29"
5) "city"
6) "BJ"Hash vs String
| 方案 | 优点 | 缺点 |
|---|---|---|
| String 存 JSON | 整体读写简单 | 改一个字段要整取整写 |
| Hash | 可单独改字段、省带宽 | 不能对整体设过期 |
Hash 的单个 field 不能是 Hash(Redis 结构不嵌套)。需要整体过期时,给 Hash 的 key 用 String 的 EXPIRE 即可——过期是按 key 维度的,与内部结构无关。