# Hash命令
# HDEL
# 语法
HDEL key field [field ...]
# 描述
从存储在 key 的哈希中移除一个或多个字段。哈希中不存在的字段将被忽略。如果删除后没有字段剩余,则哈希键本身也会被移除。如果键不存在,该命令返回 0。
# 参数
key
保存哈希的键名。
field [field ...]
要从哈希中删除的一个或多个字段。
# 示例
> HSET myhash field1 "foo"
(integer) 1
> HDEL myhash field1
(integer) 1
> HDEL myhash field2
(integer) 0
# HEXISTS
# 语法
HEXISTS key field
# 描述
返回指定 field 是否存在于存储在 key 的哈希中。如果键不存在或字段不存在,则返回 0;否则返回 1。
# 参数
key
保存哈希的键名。
field
要检查是否存在的字段。
# 示例
> HSET myhash field1 "foo"
(integer) 1
> HEXISTS myhash field1
(integer) 1
> HEXISTS myhash field2
(integer) 0
> HEXISTS nonexistent field1
(integer) 0
# HGET
# 语法
HGET key field
# 描述
返回存储在 key 的哈希中 field 字段关联的值。如果字段或键不存在,则返回 nil。
# 参数
- key
保存哈希的键名。
- field
要获取值的字段。
# 示例
> HSET myhash field1 "foo"
(integer) 1
> HGET myhash field1
"foo"
> HGET myhash field2
(nil)
# HGETALL
# 语法
HGETALL key
# 描述
返回存储在 key 的哈希中所有字段和值。在返回值中,每个字段名后紧跟其值,因此回复长度是哈希大小的两倍。如果键不存在,则返回空数组。
# 参数
- key
保存哈希的键名。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field2 "World"
(integer) 1
> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
# HINCRBY
# 语法
HINCRBY key field increment
# 描述
将存储在 key 的哈希中 field 字段的整数值增加 increment。如果 key 不存在,则创建一个保存哈希的新键。如果 field 不存在,则在执行操作前将其设置为 0。支持的整数范围限于 64 位有符号整数。
# 参数
- key
保存哈希的键名。
- field
要增加值的字段。
- increment
要加到字段值上的整数增量。
# 示例
> HSET myhash field 5
(integer) 1
> HINCRBY myhash field 1
(integer) 6
> HINCRBY myhash field -1
(integer) 5
> HINCRBY myhash field -10
(integer) -5
# HINCRBYFLOAT
# 语法
HINCRBYFLOAT key field increment
# 描述
将存储在 key 的哈希中指定 field 的浮点数值增加 increment。如果字段不存在,则在操作前将其设置为 0。负的 increment 会递减该字段。
在以下情况下会返回错误:
- 键存储的值不是哈希。
- 当前字段值或增量不是有效的双精度浮点数。
该命令会以 HSET 操作的形式传播到副本和 AOF。
# 参数
key
存储哈希的键名。
field
要递增的字段。
increment
要加到字段值上的浮点数。使用负值表示递减。
# 示例
> HSET mykey field 10.50
(integer) 1
> HINCRBYFLOAT mykey field 0.1
"10.6"
> HINCRBYFLOAT mykey field -5
"5.6"
> HSET mykey field 5.0e3
(integer) 1
> HINCRBYFLOAT mykey field 2.0e2
"5200"
# HKEYS
# 语法
HKEYS key
# 描述
返回存储在 key 的哈希中所有的字段名。如果键不存在,则返回空数组。
# 参数
key
存储哈希的键名。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field2 "World"
(integer) 1
> HKEYS myhash
1) "field1"
2) "field2"
> HKEYS nohash
(empty array)
# HLEN
# 语法
HLEN key
# 描述
返回存储在 key 的哈希中包含的字段数量。如果键不存在,则返回 0。
# 参数
key
存储哈希的键名。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field2 "World"
(integer) 1
> HLEN myhash
(integer) 2
> HLEN nohash
(integer) 0
# HMGET
# 语法
HMGET key field [field ...]
# 描述
返回存储在 key 的哈希中与指定 fields 相关联的值。对于哈希中不存在的每个字段,返回 nil。如果键不存在,HMGET 返回一个 nil 值列表。
# 参数
key
存储哈希的键名。
field [field ...]
一个或多个要获取值的字段。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field2 "World"
(integer) 1
> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
> HMGET nohash field1
1) (nil)
# HMSET
# 语法
HMSET key field value [field value ...]
# 描述
在存储于 key 的哈希中,将指定字段设置为各自的值。已有字段会被覆盖。如果 key 不存在,则创建一个新的哈希。
# 参数
key
存储哈希的键名。
field value [field value ...]
要在哈希中设置的一个或多个字段-值对。
# 示例
> HMSET myhash field1 "Hello" field2 "World"
OK
> HGET myhash field1
"Hello"
> HGET myhash field2
"World"
# HRANDFIELD
# 语法
HRANDFIELD key [count [WITHVALUES]]
# 描述
从存储在 key 的哈希中返回一个或多个随机字段。
- 仅使用
key调用时,返回一个随机字段。 - 如果
count为正数,命令最多返回count个不同的字段(无重复)。返回字段数量不超过哈希大小。 - 如果
count为负数,命令精确返回|count|个字段,可能多次返回同一个字段。 WITHVALUES修饰符在回复中包含每个选定字段的值。只能与count一起使用。
# 参数
key
哈希键的名称。
| 可选参数 | 描述 |
|---|---|
| count | 要返回的字段数量。正值返回不同字段;负值允许重复字段。 |
| WITHVALUES | 同时返回每个选定字段的值。仅在指定 count 时有效。 |
# 示例
> HSET coin heads obverse tails reverse edge null
(integer) 3
> HRANDFIELD coin
"tails"
> HRANDFIELD coin
"edge"
> HRANDFIELD coin -5 WITHVALUES
1) "heads"
2) "obverse"
3) "edge"
4) (nil)
5) "tails"
6) "reverse"
7) "heads"
8) "obverse"
9) "edge"
10) (nil)
# HSCAN
# 语法
HSCAN key cursor [MATCH pattern] [COUNT count] [NOVALUES]
# 描述
迭代存储在 key 的哈希中的字段和值。该命令使用基于游标的迭代器,类似于 SCAN:从游标 0 开始,使用每次调用返回的游标作为下一次调用的参数,直到再次返回 0。
# 参数
key
哈希键的名称。
cursor
游标值。使用
0开始迭代。
| 可选参数 | 描述 |
|---|---|
| MATCH pattern | 仅返回名称匹配给定 glob 样式模式的字段。 |
| COUNT count | 每次迭代返回的字段数量的提示。默认值为 10。 |
| NOVALUES | 仅返回字段名称,不带值。 |
# 示例
> HSET myhash name "Redis" type "database" version "7"
(integer) 3
> HSCAN myhash 0
1) "0"
2) 1) "name"
2) "Redis"
3) "type"
4) "database"
5) "version"
6) "7"
> HSCAN myhash 0 MATCH "ver*"
1) "0"
2) 1) "version"
2) "7"
> HSCAN myhash 0 NOVALUES
1) "0"
2) 1) "name"
2) "type"
3) "version"
# HSET
# 语法
HSET key field value [field value ...]
# 描述
在存储于 key 的哈希中,将指定字段设置为各自的值。现有字段会被覆盖。如果 key 不存在,则创建一个新哈希。该命令返回新添加的字段数量。
# 参数
key
哈希键的名称。
field
要在哈希中设置的字段。
value
对应字段的值。
field value ...(可选)
要在同一命令中设置的额外字段-值对。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HGET myhash field1
"Hello"
> HSET myhash field2 "Hi" field3 "World"
(integer) 2
> HGET myhash field2
"Hi"
> HGET myhash field3
"World"
> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "Hi"
5) "field3"
6) "World"
# HSETNX
# 语法
HSETNX key field value
# 描述
仅当 field 不存在时,才将存储在 key 的哈希中的 field 设置为 value。如果 key 不存在,则创建一个新哈希。如果 field 已存在,则该命令不生效。如果字段被设置则返回 1,如果字段已存在则返回 0。
# 参数
key
哈希键的名称。
field
要设置的字段,仅当它不存在时。
value
要设置的值。
# 示例
> HSETNX myhash field "Hello"
(integer) 1
> HSETNX myhash field "World"
(integer) 0
> HGET myhash field
"Hello"
# HSTRLEN
# 语法
HSTRLEN key field
# 描述
返回存储在 key 的哈希表中与 field 关联的值的字符串长度。如果 key 或 field 不存在,则返回 0。
# 参数
- key
保存哈希表的键名。
- field
要返回其值长度的字段。
# 示例
> HSET myhash f1 HelloWorld f2 99 f3 -256
(integer) 3
> HSTRLEN myhash f1
(integer) 10
> HSTRLEN myhash f2
(integer) 2
> HSTRLEN myhash f3
(integer) 4
> HSTRLEN myhash nonexistent_field
(integer) 0
# HVALS
# 语法
HVALS key
# 描述
返回存储在 key 的哈希表中的所有值。仅返回值,不包含字段名。如果 key 不存在,则返回空列表。
# 参数
- key
保存哈希表的键名。
# 示例
> HSET myhash field1 "Hello"
(integer) 1
> HSET myhash field2 "World"
(integer) 1
> HVALS myhash
1) "Hello"
2) "World"