Hash 哈希类型
掌握 Hash 类型的特点与常用命令
适合对象类数据的存储与更新
对比 String 存 JSON 的优劣
核心讲解
Hash 类似 Map 结构,键值对集合,一个 key 里可以存多个 field-value,适合存储对象。
(1)核心特点
类似对象,一个 key 存多个属性
单个字段可以单独增删改查,不用全量读写
比 String 存 JSON 更省空间,更新更灵活
适合字段不多的对象,太多字段不建议
(2)常用命令
表格
命令 | 功能 |
|---|---|
| 设置单个字段 |
| 设置多个字段 |
| 获取单个字段 |
| 获取多个字段 |
| 获取所有字段和值 |
| 获取所有字段名 |
| 获取所有值 |
| 删除指定字段 |
| 字段是否存在 |
| 字段数量 |
| 字段数值增减,原子 |
(3)适用场景
对象存储:用户信息、商品信息、配置信息,单个字段可以单独更新
字段数量不固定的键值对数据
计数器分组
(4)和 String 存 JSON 对比
表格
维度 | Hash | String + JSON |
|---|---|---|
单字段更新 | 快,直接改字段 | 慢,要全量读写序列化 |
存储空间 | 小 | 稍大 |
复杂结构 | 适合简单扁平对象 | 支持嵌套复杂结构 |
查询方式 | 只能按字段取 | 取出后自己解析 |
操作示例
# ===== 写入对象 =====
HSET user:1 name zhangsan age 20 city chengdu
# 一次设置多个字段
# 也可以多次设置
HSET user:1 email test@test.com
# ===== 读取 =====
# 单个字段
HGET user:1 name
# 多个字段
HMGET user:1 name age city
# 全部
HGETALL user:1
# 所有字段名
HKEYS user:1
# 所有值
HVALS user:1
# 字段数量
HLEN user:1
# ===== 修改删除 =====
# 字段自增
HINCRBY user:1 age 1
# 删除字段
HDEL user:1 email
# 判断存在
HEXISTS user:1 name
常见误区
什么对象都用 Hash:嵌套结构、大量字段不适合 Hash,还是用 String+JSON 更合适
HGETALL 随便用:字段很多的时候,HGETALL 一次返回大量数据,影响性能
Hash 可以存嵌套:Hash 只有一层,不能嵌套 Hash,嵌套要转 JSON 字符串
比 String 一定好:如果每次都要取全部字段,Hash 优势不大,甚至不如 String
课后练习
用 Hash 存储一个商品对象:名称、价格、库存、描述
单独修改商品的库存,-1
获取商品的名称和价格两个字段
对比 Hash 和 String 存 JSON,分别适合什么场景?

