HASH 是 Redis 中与哈希(Hash)数据结构操作相关的命令分类,用于存储和操作字段-值对的集合。
HASH 类命令包含以下常用命令:
HSET key field value [field value ...]
HGET key field
HMGET key field [field ...]
HGETALL key
HKEYS key
HVALS key
HLEN key
HEXISTS key field
HDEL key field [field ...]
HINCRBY key field increment
HINCRBYFLOAT key field increment
HSETNX key field value
HSTRLEN key field
HRANDFIELD key [count [WITHVALUES]]
HSCAN key cursor [MATCH pattern] [COUNT count]
HGETDEL key field [field ...]
HGETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp | PERSIST] field [field ...]
HPEXPIRE key milliseconds [NX | XX | GT | LT] field [field ...]
HSETEX key [EX seconds | PX milliseconds | EXAT timestamp | PXAT milliseconds-timestamp] field value [field value ...]
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| key | String | 是 | Hash 键名 |
| field | String | 是 | 字段名 |
| value | String | 是 | 字段值 |
| increment | Integer/Float | 是 | 增量值 |
| count | Integer | 否 | 随机返回的字段数量 |
| cursor | Integer | 是 | 游标,用于 HSCAN |
| pattern | String | 否 | 匹配模式 |
> HSET user:1001 name "Alice" age "30" city "Beijing"
(integer) 3
> HGET user:1001 name
"Alice"
> HLEN user:1001
(integer) 3
> HGETALL user:1001
1) "name"
2) "Alice"
3) "age"
4) "30"
5) "city"
6) "Beijing"
> HEXISTS user:1001 age
(integer) 1
> HDEL user:1001 age
(integer) 1
> HEXISTS user:1001 age
(integer) 0
> HINCRBY user:1001 visits 1
(integer) 1
> HINCRBYFLOAT user:1001 score 1.5
"1.5"
> HSETEX user:1001 EX 3600 temp "value"
(integer) 1
> HGETEX user:1001 PERSIST temp
1) "value"
> HPEXPIRE user:1001 60000 NX temp
(integer) 1
| 错误 | 原因 | 解决 |
|---|---|---|
| WRONGTYPE | key 已存在但不是 Hash | 确认 key 类型 |
| ERR wrong number of arguments | field 和 value 未成对 | 检查参数数量 |
| ERR value is not an integer | 非数字字段做 HINCRBY | 确认字段值为数字 |
Q1: Hash 适合存储什么数据? A: 结构化对象,如用户资料、商品属性、配置项等。
Q2: Hash 的 field 可以嵌套吗? A: 不能直接嵌套,value 可以是 JSON 字符串模拟嵌套。
Q3: 单个 Hash 最大能存多少字段? A: 理论上限约 232-1,但建议控制在 1000 以内。
Q4: Hash 和 String 存储 JSON 哪个更好? A: Hash 支持字段级操作,更灵活;String 存储 JSON 更紧凑。按需选择。
Q5: HGETEX 和 HSETEX 支持字段级过期吗? A: 是的,Redis 7.4+ 引入字段级过期功能,可以对单个字段设置 TTL。