HDEL key field [field ...]

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是要删除的字段数。

从存储在的哈希中删除指定的字段key。此哈希中不存在的指定字段将被忽略。如果key不存在,则将其视为空哈希,此命令返回 0.

返回值

整数回复:从哈希中删除的字段数,不包括指定但不存在的字段。

例子

redis> HSET myhash field1 "foo"
(integer) 1
redis> HDEL myhash field1
(integer) 1
redis> HDEL myhash field2
(integer) 0
redis> 

历史

  • Redis 版本 >= 2.4.0:接受多个 field 参数。

HEXISTS

从 2.0.0 开始可用。

时间复杂度: O(1)

返回是否field是存储在的哈希中的现有字段key。

返回值

整数回复,具体来说:

1如果哈希包含field.
0如果哈希不包含field,或key不存在。

例子

redis> HSET myhash field1 "foo"
(integer) 1
redis> HEXISTS myhash field1
(integer) 1
redis> HEXISTS myhash field2
(integer) 0
redis> 

HGET

从 2.0.0 开始可用。

时间复杂度: O(1)

field返回与存储在的哈希中关联的值key。

返回值

批量字符串回复:与 关联的值field,或者nil当field哈希中不存在或key不存在时。

例子

redis> HSET myhash field1 "foo"
(integer) 1
redis> HGET myhash field1
"foo"
redis> HGET myhash field2
(nil)
redis> 

HGETALL

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是散列的大小。

返回存储在的哈希的所有字段和值key。在返回值中,每个字段名后面都跟着它的值,所以回复的长度是哈希大小的两倍。

返回值

数组回复:存储在哈希中的字段列表及其值,如果key不存在则为空列表。

例子

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HGETALL myhash
1) "field1"
2) "Hello"
3) "field2"
4) "World"
redis> 

HINCRBY

从 2.0.0 开始可用。

时间复杂度: O(1)

field将存储在哈希中的数字递增keyby increment。如果key不存在,则创建一个包含哈希的新密钥。如果field不存在,则0在执行操作之前将值设置为。

HINCRBY支持的值范围限于 64 位有符号整数。

返回值

整数回复:field递增操作后的值。

例子

由于increment参数是有符号的,因此可以执行递增和递减操作:

redis> HSET myhash field 5
(integer) 1
redis> HINCRBY myhash field 1
(integer) 6
redis> HINCRBY myhash field -1
(integer) 5
redis> HINCRBY myhash field -10
(integer) -5
redis> 

HINCRBYFLOAT

从 2.6.0 开始可用。

时间复杂度: O(1)

field将存储在 的指定的散列值增加指定的key,并表示浮点数increment。如果增量值为负,则结果是使散列字段值递减而不是递增。如果该字段不存在,则0在执行操作之前将其设置为。如果出现以下情况之一,则会返回错误:

  • 该字段包含错误类型的值(不是字符串)。
  • 当前字段内容或指定的增量不可解析为双精度浮点数。
    此命令的确切行为与INCRBYFLOAT 命令之一相同,请参阅INCRBYFLOAT文档以获取更多信息。

返回值

批量字符串回复:field增量后的值。

例子

redis> HSET mykey field 10.50
(integer) 1
redis> HINCRBYFLOAT mykey field 0.1
"10.6"
redis> HINCRBYFLOAT mykey field -5
"5.6"
redis> HSET mykey field 5.0e3
(integer) 0
redis> HINCRBYFLOAT mykey field 2.0e2
"5200"
redis> 

实施细节

该命令始终在复制链接和 Append Only File 中作为HSET操作传播,因此底层浮点数学实现中的差异不会成为不一致的根源。

HKEYS

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是散列的大小。

返回存储在的哈希中的所有字段名称key。

返回值

数组回复key:哈希中的字段列表,如果不存在则为空列表。

例子

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HKEYS myhash
1) "field1"
2) "field2"
redis> 

HLEN

从 2.0.0 开始可用。

时间复杂度: O(1)

返回存储在的哈希中包含的字段数key。

返回值

整数回复:哈希中的字段数,或0何时key不存在。

例子

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HLEN myhash
(integer) 2
redis> 

HMGET

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是请求的字段数。

返回与fields存储在 中的指定哈希 值相关联的值key。

对于field散列中不存在的每一个,nil都会返回一个值。因为不存在的键被视为空哈希,所以对不存在的键运行HMGETkey将返回nil值列表。

返回值

数组回复:与给定字段关联的值列表,与请求的顺序相同。

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HMGET myhash field1 field2 nofield
1) "Hello"
2) "World"
3) (nil)
redis> 

HMSET

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是要设置的字段数。

弃用通知: 从 Redis 版本 4.0.0 开始,此命令被视为已弃用。虽然它不太可能被完全删除,但更喜欢使用带有多个字段值对的 HSET 来代替。

将指定的字段设置为它们在存储在的哈希中的各自值 key。此命令会覆盖散列中已存在的任何指定字段。如果key不存在,则创建一个包含哈希的新密钥。

返回值

简单的字符串回复

例子

redis> HMSET myhash field1 "Hello" field2 "World"
"OK"
redis> HGET myhash field1
"Hello"
redis> HGET myhash field2
"World"
redis> 

HRANDFIELD

从 6.2.0 开始可用。

时间复杂度: O(N) 其中 N 是返回的字段数

仅使用key参数调用时,从存储在的哈希值中返回一个随机字段key。

如果提供的参数是正数,则返回不同字段count的数组。数组的长度是或散列的字段数 ( HLEN ),以较低者为准。count

如果使用否定调用,则行为会发生变化,并且允许该命令多次count返回相同的字段。在这种情况下,返回的字段数是指定的绝对值。count

可选WITHVALUES修饰符更改回复,使其包含随机选择的哈希字段的相应值。

返回值

Bulk string reply:没有附加count参数,该命令返回一个带有随机选择的字段的批量回复,或者nil当key不存在时。

数组回复:当附加count参数传递时,该命令返回一个字段数组,key如果不存在则返回一个空数组。如果WITHVALUES使用了修饰符,则回复是一个列表字段及其来自哈希的值。

例子

redis> HMSET coin heads obverse tails reverse edge null
"OK"
redis> HRANDFIELD coin
ERR Unknown or disabled command 'HRANDFIELD'
redis> HRANDFIELD coin
ERR Unknown or disabled command 'HRANDFIELD'
redis> HRANDFIELD coin -5 WITHVALUES
ERR Unknown or disabled command 'HRANDFIELD'
redis> 

通过计数时的行为规范
当count参数为正值时,此命令的行为如下:

  • 不返回重复字段。

  • 如果count大于散列中的字段数,则该命令将仅返回整个散列而不返回其他字段。

  • 回复中的字段顺序并不是真正随机的,因此如果需要,由客户端来打乱它们。
    当count为负值时,行为变化如下:

  • 重复字段是可能的。

  • 如果哈希为空(不存在的键),则始终返回确切count的字段或空数组。

  • 回复中的字段顺序是真正随机的。

HSCAN

自 2.8.0 起可用。

时间复杂度:每次调用 O(1)。O(N) 用于完整的迭代,包括足够的命令调用以使光标返回 0。N 是集合内的元素数。

有关HSCAN文档,请参阅SCAN 。

HSET

从 2.0.0 开始可用。

时间复杂度:每个添加的字段/值对 O(1),因此当使用多个字段/值对调用命令时添加 N 个字段/值对是 O(N)。

设置field存储在keyto的哈希值value。如果key不存在,则创建一个包含哈希的新密钥。如果field散列中已经存在,则将其覆盖。

返回值

整数回复:添加的字段数。

例子

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HGET myhash field1
"Hello"
redis> 

历史

  • Redis 版本 >= 4.0.0:接受多个 fieldvalue 参数。

HSETNX

从 2.0.0 开始可用。

时间复杂度: O(1)

仅在不存在的情况下设置field存储在keyto的哈希值。如果不存在,则创建一个包含哈希的新密钥。如果已经存在,则此操作无效。valuefieldkeyfield

返回值

整数回复,具体来说:

  • 1iffield是哈希中的一个新字段并value已设置。
  • 0如果field哈希中已经存在并且没有执行任何操作。

例子

redis> HSETNX myhash field "Hello"
(integer) 1
redis> HSETNX myhash field "World"
(integer) 0
redis> HGET myhash field
"Hello"
redis> 

HSTRLEN

自 3.2.0 起可用。

时间复杂度: O(1)

field返回与存储在 的哈希中关联的值的字符串长度key。如果key或field不存在,则返回 0。

返回值

整数回复:与 关联的值的字符串长度,或者当哈希中不存在或根本不存在时field为零。fieldkey

例子

redis> HMSET myhash f1 HelloWorld f2 99 f3 -256
"OK"
redis> HSTRLEN myhash f1
(integer) 10
redis> HSTRLEN myhash f2
(integer) 2
redis> HSTRLEN myhash f3
(integer) 4
redis> 

HVALS

从 2.0.0 开始可用。

时间复杂度: O(N),其中 N 是散列的大小。

返回存储在 的哈希中的所有值key。

返回值

数组回复key:散列中的值列表,如果不存在,则为空列表。

例子

redis> HSET myhash field1 "Hello"
(integer) 1
redis> HSET myhash field2 "World"
(integer) 1
redis> HVALS myhash
1) "Hello"
2) "World"
redis>