跳到主要内容

数据结构

哈希

HDEL

语法

    HDEL key field [field ...]

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


HEXISTS

语法

    HEXISTS key field

如果字段是存储在 key 的哈希中的现有字段,则返回。


HGET

语法

    HGET key field

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


HGETALL

语法

    HGETALL key

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


HINCRBY

语法

    HINCRBY key field increment

将存储在 key 的哈希中字段存储的数字增加 increment。如果 key 不存在,则创建一个包含哈希的新 key。如果字段不存在,则在执行操作之前将值设置为 0。HINCRBY 支持的值范围仅限于 64 位有符号整数。


HINCRBYFLOAT

语法

    HINCRBYFLOAT key field increment

将存储在 key 的哈希中表示浮点数的指定字段增加指定的增量。如果增量值为负,则结果是哈希字段值递减而不是递增。如果字段不存在,则在执行操作之前将其设置为 0。如果发生以下任一情况,则返回错误:

  • 字段包含错误类型的值(不是字符串)。
  • 当前字段内容或指定的增量不能解析为双精度浮点数。

HKEYS

语法

    HKEYS key

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


HLEN

语法

    HLEN key

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


HMGET

语法

    HMGET key field [field ...]

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

对于哈希中不存在的每个字段,将返回 nil 值。由于不存在的键被视为空哈希,因此对不存在的 key 运行 HMGET 将返回一个 nil 值列表。

HMSET

语法

    HMSET key field value [field value ...]

已弃用,建议使用带有多个字段值对的 HSET。

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


HRANDFIELD

语法

    HRANDFIELD key [count [WITHVALUES]]

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

如果提供的 count 参数为正,则返回一个包含不同字段的数组。数组的长度是 count 或哈希的字段数 (HLEN),取较小者。

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

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


HSCAN

语法

    HSCAN key cursor [MATCH pattern] [COUNT count] [NOVALUES]

迭代存储在给定 key 的哈希的字段和值。与 SSCANZSCAN 命令相同,HSCAN 用于增量迭代哈希集合的元素。

match 参数允许在从集合中检索元素后对其应用过滤器。count 选项设置从服务器返回到此命令的最大项目数的限制。此限制也与全局服务器设置的 object-scan-count-limit 结合设置。

您可以使用 NOVALUES 选项让 Redis 只返回哈希表中的键,而不返回其对应的值。


HSET

语法

    HSET key field value

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


HSETNX

语法

    HSETNX key field value

将存储在 key 的哈希中的字段设置为 value,仅当字段尚不存在时。如果 key 不存在,则会创建一个包含哈希的新 key。如果字段已存在,此操作无效。


HSTRLEN

语法

    HSTRLEN key field

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


HVALS

语法

    HVALS key 

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


HEXPIRE

语法

    HEXPIRE key seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]

为哈希键的一个或多个字段设置超时。超时到期后,字段将自动删除。超时以秒为单位指定。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的字段设置过期
  • XX: 仅对已设置超时的字段设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个字段,返回

  • 1 如果设置了超时
  • 0 如果字段不存在
  • -1 如果由于条件不满足而未设置超时

HEXPIREAT

语法

    HEXPIREAT key unix-time-seconds [NX | XX | GT | LT] FIELDS numfields field [field ...]

为哈希键的一个或多个字段设置绝对过期时间(Unix 时间戳,以秒为单位)。时间戳过后,字段将自动删除。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的字段设置过期
  • XX: 仅对已设置超时的字段设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个字段,返回

  • 1 如果设置了超时
  • 0 如果字段不存在
  • -1 如果由于条件不满足而未设置超时

HPEXPIRE

语法

    HPEXPIRE key milliseconds [NX | XX | GT | LT] FIELDS numfields field [field ...]

与 HEXPIRE 类似,但超时以毫秒而不是秒为单位指定。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的字段设置过期
  • XX: 仅对已设置超时的字段设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个字段,返回

  • 1 如果设置了超时
  • 0 如果字段不存在
  • -1 如果由于条件不满足而未设置超时

HPEXPIREAT

语法

    HPEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT] FIELDS numfields field [field ...]

与 HEXPIREAT 类似,但使用毫秒而不是秒的 Unix 时间戳。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的字段设置过期
  • XX: 仅对已设置超时的字段设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个字段,返回

  • 1 如果设置了超时
  • 0 如果字段不存在
  • -1 如果由于条件不满足而未设置超时

HTTL

语法

    HTTL key FIELDS numfields field [field ...]

返回设置了超时的一个或多个哈希字段的剩余生存时间(以秒为单位)。

Resp 回复

数组回复:对于每个字段,返回

  • 如果字段存在且设置了过期时间,则为以秒为单位的 TTL
  • -1 如果字段存在但未设置过期时间
  • -2 如果字段不存在

HPTTL

语法

    HPTTL key FIELDS numfields field [field ...]

与 HTTL 类似,但返回剩余生存时间(以毫秒而不是秒为单位)。

Resp 回复

数组回复:对于每个字段,返回

  • 如果字段存在且设置了过期时间,则为以毫秒为单位的 TTL
  • -1 如果字段存在但未设置过期时间
  • -2 如果字段不存在

HEXPIRETIME

语法

    HEXPIRETIME key FIELDS numfields field [field ...]

返回指定哈希字段将过期的绝对 Unix 时间戳(以秒为单位)。

Resp 回复

数组回复:对于每个字段,返回

  • 字段过期时的 Unix 时间戳(以秒为单位)
  • -1 如果字段存在但未设置过期时间
  • -2 如果字段不存在

HPEXPIRETIME

语法

    HPEXPIRETIME key FIELDS numfields field [field ...]

与 HEXPIRETIME 类似,但返回以毫秒而不是秒为单位的过期时间戳。

Resp 回复

数组回复:对于每个字段,返回

  • 字段过期时的 Unix 时间戳(以毫秒为单位)
  • -1 如果字段存在但未设置过期时间
  • -2 如果字段不存在

HPERSIST

语法

    HPERSIST key FIELDS numfields field [field ...]

从指定的哈希字段中删除过期时间,使其持久化。

Resp 回复

数组回复:对于每个字段,返回

  • 1 如果超时已删除
  • 0 如果字段存在但没有超时
  • -1 如果字段不存在

HCOLLECT

语法

    HCOLLECT key [key ...]

手动触发清除给定哈希集合键的内存中已过期字段。

使用 * 作为键从所有哈希键中收集。

Resp 回复

简单回复:OK 响应 错误回复:ERR HCOLLECT 扫描已在进行中


列表

BLMOVE

语法

    BLMOVE source destination <LEFT | RIGHT> <LEFT | RIGHT> timeout

BLMOVE 是 LMOVE 的阻塞变体。当 source 包含元素时,此命令的行为与 LMOVE 完全相同。在 MULTI/EXEC 块中使用时,此命令的行为与 LMOVE 完全相同。当 source 为空时,Garnet 将阻塞连接,直到另一个客户端推入元素或达到超时(指定最大阻塞秒数的双精度值)。超时为零可用于无限期阻塞。


BRPOPLPUSH

语法

BRPOPLPUSH source destination timeout

BRPOPLPUSH 命令从存储在 source 的列表中删除最后一个元素,并将该元素推入存储在 destination 的列表中。然后将该元素返回给调用者。

Resp 回复

批量字符串回复:被弹出和推入的元素。


BLMPOP

语法

    BLMPOP timeout numkeys key [key ...] <LEFT | RIGHT> [COUNT count]

BLMPOP 是 LMPOP 的阻塞变体。当任何列表包含元素时,此命令的行为与 LMPOP 完全相同。在 MULTI/EXEC 块中使用时,此命令的行为与 LMPOP 完全相同。当所有列表都为空时,Garnet 将阻塞连接,直到另一个客户端推入元素或达到超时(指定最大阻塞秒数的双精度值)。超时为零可用于无限期阻塞。


BLPOP

语法

    BLPOP key [key ...] timeout

BLPOP 是一个阻塞列表弹出原语。它是 LPOP 的阻塞版本,因为它在没有元素可以从任何给定列表中弹出时阻塞连接。元素从第一个非空列表的头部弹出,给定键按它们给出的顺序检查。


BRPOP

语法

    BRPOP key [key ...] timeout

BRPOP 是一个阻塞列表弹出原语。它是 RPOP 的阻塞版本,因为它在没有元素可以从任何给定列表中弹出时阻塞连接。元素从第一个非空列表的尾部弹出,给定键按它们给出的顺序检查。


LINDEX

语法

    LINDEX key index

删除存储在 key 的列表中索引 index 处的元素。索引是零基的。负索引可用于指定从列表尾部开始的元素。


LINSERT

语法

    LINSERT key BEFORE|AFTER pivot element

将元素插入存储在 key 的列表中,位于参考值 pivot 之前或之后。当 key 不存在时,它被视为空列表,不执行任何操作。


LLEN

语法

    LLEN key

返回存储在 key 的列表的长度。如果 key 不存在,它被解释为空列表并返回 0。


LMOVE

语法

    LMOVE source destination LEFT|RIGHT LEFT|RIGHT

原子性地返回并删除存储在 source 的列表的第一个/最后一个元素(头部/尾部取决于 wherefrom 参数),并将该元素推入存储在 destination 的列表的第一个/最后一个元素(头部/尾部取决于 whereto 参数)。

此命令取代了现在已弃用的 RPOPLPUSH。执行 LMOVE RIGHT LEFT 等效。


LMPOP

语法

    LMPOP numkeys key [key ...] <LEFT | RIGHT> [COUNT count]

从提供的键名列表中弹出第一个非空列表键的一个或多个元素。


LPOP

语法

    LPOP key [count]

删除并返回存储在 key 的列表的第一个元素。

默认情况下,该命令从列表开头弹出一个元素。当提供可选的 count 参数时,回复将包含最多 count 个元素,具体取决于列表的长度。


LPOS

语法

    LPOS key element [RANK rank] [COUNT num-matches] [MAXLEN len]

该命令返回 Redis 列表中匹配元素的索引。默认情况下,在未给出任何选项时,它将从头到尾扫描列表,查找“元素”的第一个匹配项。如果找到元素,则返回其索引(列表中基于零的位置)。否则,如果未找到匹配项,则返回 nil。

Resp 回复

以下任何一种

  • 空回复:如果没有匹配元素。
  • 整数回复:表示匹配元素的整数。
  • 数组回复:如果给定 COUNT 选项,则返回表示匹配元素的整数数组(如果没有匹配项,则返回空数组)。

LPUSH

语法

    LPUSH key [element] [element ...]

将所有指定值插入存储在 key 的列表的头部。如果 key 不存在,则在执行 push 操作之前将其创建为空列表。


LPUSHX

语法

    LPUSHX key [element] [element ...]

将指定值插入存储在 key 的列表的头部,仅当 key 已经存在并包含列表时。与 LPUSH 相反,当 key 尚不存在时,不会执行任何操作。


LRANGE

语法

    LRANGE key start stop

返回存储在 key 的列表的指定元素。偏移量 start 和 stop 是基于零的索引,0 是列表的第一个元素(列表的头部),1 是下一个元素,依此类推。


LREM

语法

    LREM key count element

从存储在 key 的列表中删除与 element 相等的第一个 count 次出现。count 参数以下列方式影响操作:

  • count > 0: 从头到尾删除与 element 相等的元素。

  • count < 0: 从尾到头删除与 element 相等的元素。

  • count = 0: 删除所有与 element 相等的元素。


LSET

语法

    LSET key index element

index 处的列表元素设置为 element。有关 index 参数的更多信息,请参阅 LINDEX

超出范围的索引将返回错误。


LTRIM

语法

    LTRIM key start stop

修剪现有列表,使其只包含指定范围的元素。start 和 stop 都是基于零的索引,其中 0 是列表的第一个元素(头部),1 是下一个元素,依此类推。


RPOP

语法

    RPOP key [count]

删除并返回存储在 key 的列表的最后一个元素。

默认情况下,该命令从列表末尾弹出一个元素。当提供可选的 count 参数时,回复将包含最多 count 个元素,具体取决于列表的长度。


RPOPLPUSH

语法

    RPOPLPUSH source destination

原子性地返回并删除存储在 source 的列表的最后一个元素(尾部),并将该元素推入存储在 destination 的列表的第一个元素(头部)。

在迁移或编写新代码时,可以使用带有 RIGHT 和 LEFT 参数的 LMOVE 替换它。


RPUSH

语法

    RPUSH key element [element]

将所有指定值插入存储在 key 的列表的尾部。如果 key 不存在,则在执行 push 操作之前将其创建为空列表。


RPUSHX

语法

    RPUSHX key element [element]

将指定值插入存储在 key 的列表的尾部,仅当 key 已经存在并包含列表时。与 RPUSH 相反,当 key 尚不存在时,不会执行任何操作。


集合

SADD

语法

    SADD key member [member]

将指定成员添加到存储在 key 的集合中。已是此集合成员的指定成员将被忽略。如果 key 不存在,则在添加指定成员之前创建一个新集合。


SCARD

语法

    SCARD key

返回存储在 key 的集合的基数(元素数量)。


SMEMBERS

语法

    SMEMBERS key

返回存储在 key 的集合值的所有成员。


SMOVE

语法

    SMOVE source destination member

将成员从 source 的集合移动到 destination 的集合。此操作是原子的。在任何给定时刻,该元素都将显示为 source 或 destination 的成员,供其他客户端使用。


SPOP

语法

    SPOP key [count]

从存储在 key 的集合值中删除并返回一个或多个随机成员。


SISMEMBER

语法

    SISMEMBER key member

返回 member 是否是存储在 key 的集合的成员。


SMISMEMBER

语法

    SMISMEMBER key member [member ...]

返回每个 member 是否是存储在 key 的集合的成员。

Resp 回复

数组回复:一个列表,表示给定元素的成员资格,与请求的顺序相同。


SRANDMEMBER

语法

    SRANDMEMBER key [count]

仅使用 key 参数调用时,从存储在 key 的集合值中返回一个随机元素。

如果提供的 count 参数为正,则返回一个包含**不同元素**的数组。数组的长度是 count 或集合的基数 (SCARD),取较小者。

如果使用负数 count 调用,则行为会改变,并且该命令允许**多次返回相同的元素**。在这种情况下,返回的元素数是指定 count 的绝对值。


SREM

语法

    SREM key member [member]

从存储在 key 的集合中删除指定的成员。非集合成员的指定成员将被忽略。

如果 key 不存在,它将被视为空集合,此命令返回 0。


SSCAN

语法

    SSCAN key cursor [MATCH pattern] [COUNT count]

迭代集合类型元素。与 HSCANZSCAN 命令相同,SSCAN 用于增量迭代存储在 key 的集合的元素。

match 参数允许在从集合中检索元素后对其应用过滤器。count 选项设置从服务器返回到此命令的最大项目数的限制。此限制也与全局服务器设置的 object-scan-count-limit 结合设置。


SUNION

语法

    SUNION key [key ...]

返回所有给定集合的并集产生的集合成员。不存在的键被视为空集合。


SUNIONSTORE

语法

    SUNIONSTORE destination key [key ...]

此命令等于 SUNION,但不是返回结果集,而是将其存储在 destination 中。

如果 destination 已存在,则会被覆盖。


SINTER

语法

    SINTER key [key ...]

返回所有给定集合的交集产生的集合成员。不存在的键被视为空集合。


SINTERSTORE

语法

    SINTERSTORE destination key [key ...]

此命令等于 SINTER,但不是返回结果集,而是将其存储在 destination 中。

如果 destination 已存在,则会被覆盖。


SINTERCARD

语法

    SINTERCARD numkeys [key ...] [LIMIT limit]

返回所有给定集合的交集产生的集合中的成员数量。不存在的键被视为空集合。

可选的 LIMIT 参数指定要计数的交集成员数量的上限。


SDIFF

语法

    SDIFF key [key ...]

返回第一个集合与所有后续集合之间的差集所产生的集合成员。

不存在的 Keys 被视为空集合。


SDIFFSTORE

语法

    SDIFFSTORE destination key [key ...]

此命令等于 SDIFF,但不是返回结果集,而是将其存储在 destination 中。

如果 destination 已存在,则会被覆盖。


有序集合

ZADD

语法

    ZADD key score member [score member ...]

将所有指定成员及其指定分数添加到存储在 key 的有序集合中。可以指定多个分数/成员对。如果指定成员已是有序集合的成员,则会更新分数并将元素重新插入到正确位置以确保正确排序。

如果 key 不存在,则会创建一个新的有序集合,并将指定成员作为唯一成员,就像有序集合为空一样。

分数应为双精度浮点数的字符串表示。


ZCARD

语法

    ZCARD key

返回存储在 key 的有序集合的基数(元素数量)。


ZCOUNT

语法

    ZCOUNT key min max

返回存储在 key 的有序集合中分数介于 min 和 max 之间的元素数量。

min 和 max 参数的语义与 ZRANGEBYSCORE 中描述的相同。


ZDIFF

语法

    ZDIFF numkeys key [key ...] [WITHSCORES]

返回第一个输入有序集合键与所有后续输入有序集合键之间的差异。输入键的总数由 numkeys 指定。

不存在的键被视为空集合。


ZDIFFSTORE

语法

    ZDIFFSTORE destination numkeys key [key ...]

计算第一个输入有序集合与所有后续输入有序集合之间的差异,并将结果存储在 destination 中。输入键的总数由 numkeys 指定。

不存在的键被视为空集合。

Resp 回复

整数回复:destination 中结果有序集合的成员数量。


ZINCRBY

语法

    ZINCRBY key increment member

将存储在 key 的有序集合中 member 的分数增加 increment。如果 member 不存在于有序集合中,则将其添加,其分数为 increment(就像其之前的分数为 0.0)。如果 key 不存在,则创建一个新的有序集合,并将指定 member 作为其唯一成员。

key 存在但不是有序集合时,返回错误。

分数应为数值的字符串表示,并接受双精度浮点数。可以提供负值以减小分数。


ZINTER

语法

    ZINTER numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM|MIN|MAX>] [WITHSCORES]

计算指定键给出的有序集合的交集并返回结果。可以指定多个键。

结果是一个新的有序集合,其元素与输入集合相同,但分数等于输入集合中元素分数的总和。


ZINTERCARD

语法

    ZINTERCARD numkeys key [key ...] [LIMIT limit]

返回指定键给出的有序集合交集中的元素数量。


ZINTERSTORE

语法

    ZINTERSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM|MIN|MAX>]

计算指定键给出的有序集合的交集,并将结果存储在目标键中。


ZLEXCOUNT

语法

    ZLEXCOUNT key min max

当有序集合中的所有元素都以相同的分数插入时,为了强制按字典顺序排序,此命令返回存储在 key 的有序集合中值介于 min 和 max 之间的元素数量。

min 和 max 参数的含义与 ZRANGEBYLEX 中描述的相同。


ZMSCORE

语法

    ZMSCORE key member [member ...]

返回与存储在 key 的有序集合中指定 members 关联的分数。

对于有序集合中不存在的每个 member,将返回 nil 值。

返回以下之一:

Nil 回复: 如果 member 不存在于有序集合中。
数组回复: 字符串 member 分数的列表,为双精度浮点数。


BZMPOP

语法

    BZMPOP timeout numkeys key [key ...] <MIN | MAX> [COUNT count]

BZMPOP 是 ZMPOP 的阻塞变体。当任何有序集合包含元素时,此命令的行为与 ZMPOP 完全相同。在 MULTI/EXEC 块中使用时,此命令的行为与 ZMPOP 完全相同。当所有有序集合都为空时,Garnet 将阻塞连接,直到另一个客户端推入元素或达到超时(指定最大阻塞秒数的双精度值)。超时为零可用于无限期阻塞。

  • MIN: 从最低分数开始删除元素
  • MAX: 从最高分数开始删除元素
  • COUNT: 指定要弹出多少个元素(默认为 1)

Resp 回复

以下之一

  • 空回复:当无法弹出任何元素时。
  • 数组回复:一个两元素数组,第一个元素是被弹出元素的键名,第二个元素是弹出元素的数组。元素数组中的每个条目也是一个包含成员及其分数的数组。

BZPOPMAX

语法

    BZPOPMAX key [key ...] timeout

BZPOPMAX 是 ZPOPMAX 的阻塞变体。当任何有序集合包含元素时,此命令的行为与 ZPOPMAX 完全相同。在 MULTI/EXEC 块中使用时,此命令的行为与 ZPOPMAX 完全相同。当所有有序集合都为空时,Garnet 将阻塞连接,直到另一个客户端推入元素或达到超时(指定最大阻塞秒数的双精度值)。超时为零可用于无限期阻塞。

Resp 回复

以下之一

  • 空回复:当无法弹出元素且超时已过期时。
  • 数组回复:键名、弹出的成员及其分数。

BZPOPMIN

语法

    BZPOPMIN key [key ...] timeout

BZPOPMIN 是 ZPOPMIN 的阻塞变体。当任何有序集合包含元素时,此命令的行为与 ZPOPMIN 完全相同。在 MULTI/EXEC 块中使用时,此命令的行为与 ZPOPMIN 完全相同。当所有有序集合都为空时,Garnet 将阻塞连接,直到另一个客户端推入元素或达到超时(指定最大阻塞秒数的双精度值)。超时为零可用于无限期阻塞。

Resp 回复

以下之一

  • 空回复:当无法弹出元素且超时已过期时。
  • 数组回复:键名、弹出的成员及其分数。

ZMPOP

语法

    ZMPOP numkeys key [key ...] <MIN | MAX> [COUNT count]

从有序集合中删除并返回一个或多个分数最低(默认)或分数最高的成员。

  • MIN:删除分数最低的元素
  • MAX:删除分数最高的元素
  • COUNT:指定要弹出的元素数量(默认为 1)

ZPOPMAX

语法

    ZPOPMAX key [count]

从存储在 key 的有序集合中删除并返回最多 count 个分数最高的成员。

未指定时,count 的默认值为 1。指定大于有序集合基数的 count 值不会产生错误。当返回多个元素时,分数最高的元素将首先返回,然后是分数较低的元素。


ZPOPMIN

语法

    ZPOPMIN key [count]

从存储在 key 的有序集合中删除并返回最多 count 个分数最低的成员。

未指定时,count 的默认值为 1。指定大于有序集合基数的 count 值不会产生错误。当返回多个元素时,分数最低的元素将首先返回,然后是分数较高的元素。


ZRANDMEMBER

语法

    ZRANDMEMBER key [count [WITHSCORES]]

仅使用 key 参数调用时,从存储在 key 的有序集合值中返回一个随机元素。

如果提供的 count 参数为正,则返回一个包含不同元素的数组。数组的长度是 count 或有序集合的基数 ZCARD,取较小者。

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

可选的 WITHSCORES 修饰符会更改回复,使其包含从有序集合中随机选择的元素的相应分数。


ZRANGE

语法

    ZRANGE key start stop [BYSCORE|BYLEX] [REV] [LIMIT offset count] [WITHSCORES]

返回存储在 key 的有序集合中指定范围的元素。

ZRANGE 可以执行不同类型的范围查询:按索引(排名)、按分数或按字典顺序。


ZRANGEBYLEX

语法

    ZRANGEBYLEX key min max [LIMIT offset count]

当有序集合中的所有元素都以相同的分数插入时,为了强制按字典顺序排序,此命令返回存储在 key 的有序集合中值介于 min 和 max 之间的所有元素。

如果有序集合中的元素具有不同的分数,则返回的元素未指定。

从旧版本迁移时,可以使用带有 BYLEX 参数的 ZRANGE 替换它。


ZRANGEBYSCORE

语法

    ZRANGEBYSCORE key min max [WITHSCORES] [LIMIT offset count]

返回存储在 key 的有序集合中分数介于 min 和 max 之间的所有元素(包括分数等于 min 或 max 的元素)。元素被视为按从低到高的分数排序。

分数相同的元素按字典顺序返回。

在迁移或编写新代码时,可以使用带有 BYSCORE 参数的 ZRANGE 替换它。


ZRANK

语法

    ZRANK key member [WITHSCORE]

返回存储在 key 的有序集合中成员的排名,分数按从低到高排序。排名(或索引)是基于 0 的,这意味着分数最低的成员排名为 0。

可选的 WITHSCORE 参数会补充命令的回复,其中包含返回元素的得分。

使用 ZREVRANK 获取分数从高到低排序的元素的排名。


ZREM

语法

    ZREM key member [member ...]

从存储在 key 的有序集合中删除指定的成员。不存在的成员将被忽略。


ZREMRANGEBYLEX

语法

    ZREMRANGEBYLEX key min max

当有序集合中的所有元素都以相同的分数插入时,为了强制按字典顺序排序,此命令会删除存储在 key 的有序集合中介于 min 和 max 指定的字典范围之间的所有元素。

min 和 max 的含义与 ZRANGEBYLEX 命令相同。同样,此命令实际上删除了与 ZRANGEBYLEX 在使用相同 min 和 max 参数调用时会返回的元素。


ZREVRANGEBYLEX

语法

ZREVRANGEBYLEX key max min [LIMIT offset count]

ZREVRANGEBYLEX 命令按字典顺序返回有序集合中的成员范围,从较高字符串到较低字符串排序。

Resp 回复

数组回复:指定范围内的元素列表。


ZREMRANGEBYSCORE

语法

    ZREMRANGEBYSCORE key min max

删除存储在 key 的有序集合中分数介于 min 和 max 之间的所有元素(包含 min 和 max)。


ZREMRANGEBYRANK

语法

    ZREMRANGEBYRANK key start stop

删除存储在 key 的有序集合中排名介于 start 和 stop 之间的所有元素。start 和 stop 都是基于 0 的索引,其中 0 是分数最低的元素。这些索引可以是负数,表示从分数最高的元素开始的偏移量。例如:-1 是分数最高的元素,-2 是分数第二高的元素,依此类推。


ZREMRANGEBYSCORE

语法

    ZREMRANGEBYSCORE key min max

删除存储在 key 的有序集合中分数介于 min 和 max 之间的所有元素(包含 min 和 max)。


ZREVRANGE

语法

    ZREVRANGE key start stop [WITHSCORES]

返回存储在 key 的有序集合中指定范围的元素。元素被视为按从高到低的分数排序。分数相同的元素使用降序字典顺序。

除了反向排序,ZREVRANGEZRANGE 类似。


ZREVRANGEBYSCORE

语法

    ZREVRANGEBYSCORE key max min [WITHSCORES] [LIMIT offset count]

返回存储在 key 的有序集合中分数介于 max 和 min 之间的所有元素(包括分数等于 max 或 min 的元素)。


ZREVRANK

语法

    ZREVRANK key member [WITHSCORE]

返回存储在 key 的有序集合中成员的排名,分数按从高到低排序。排名(或索引)是基于 0 的,这意味着分数最高的成员排名为 0。

可选的 WITHSCORE 参数会补充命令的回复,其中包含返回元素的得分。

使用 ZRANK 获取分数从低到高排序的元素的排名。


ZSCAN

语法

    ZSCAN key cursor [MATCH pattern] [COUNT count]

迭代有序集合的元素。与 HSCANSSCAN 命令相同,ZSCAN 用于增量迭代存储在 key 的集合的元素。

match 参数允许在从集合中检索元素后对其应用过滤器。count 选项设置从服务器返回到此命令的最大项目数的限制。此限制也与全局服务器设置的 object-scan-count-limit 结合设置。


ZSCORE

语法

    ZSCORE key member

返回存储在 key 的有序集合中 member 的分数。

如果 member 不存在于有序集合中,或者 key 不存在,则返回 nil。


ZRANGESTORE

语法

    ZRANGESTORE dst src min max [BYSCORE|BYLEX] [REV] [LIMIT offset count]

将存储在 src 的有序集合中指定范围的元素存储到存储在 dst 的有序集合中。


ZUNION

语法

    ZUNION numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] [WITHSCORES]

返回由键指定的输入有序集合的并集。输入键的总数由 numkeys 指定。

不存在的键被视为空集合。

Resp 回复

数组回复:并集的结果,可选地包括它们的得分(当使用 WITHSCORES 时)。


ZUNIONSTORE

语法

    ZUNIONSTORE destination numkeys key [key ...] [WEIGHTS weight [weight ...]] [AGGREGATE <SUM | MIN | MAX>] 

计算由键指定的输入有序集合的并集,并将结果存储在 destination 中。输入键的总数由 numkeys 指定。

不存在的键被视为空集合。

Resp 回复

整数回复:destination 中结果有序集合的成员数量。


ZEXPIRE

语法

    ZEXPIRE key seconds [NX | XX | GT | LT] MEMBERS nummembers member [member ...]

为有序集合键的一个或多个成员设置超时。超时到期后,成员将自动删除。超时以秒为单位指定。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的成员设置过期
  • XX: 仅对已设置超时的成员设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个成员,返回

  • 1 如果设置了超时
  • 0 如果成员不存在
  • -1 如果由于条件不满足而未设置超时

ZEXPIREAT

语法

    ZEXPIREAT key unix-time-seconds [NX | XX | GT | LT] MEMBERS nummembers member [member ...]

为有序集合的一个或多个成员设置绝对过期时间(Unix 时间戳,以秒为单位)。时间戳过后,成员将自动删除。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的成员设置过期
  • XX: 仅对已设置超时的成员设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp回复

数组回复:对于每个成员,返回

  • 1 如果设置了超时
  • 0 如果成员不存在
  • -1 如果由于条件不满足而未设置超时

ZPEXPIRE

语法

    ZPEXPIRE key milliseconds [NX | XX | GT | LT] MEMBERS nummembers member [member ...]

与 HEXPIRE 类似,但超时以毫秒而不是秒为单位指定。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的成员设置过期
  • XX: 仅对已设置超时的成员设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个成员,返回

  • 1 如果设置了超时
  • 0 如果成员不存在
  • -1 如果由于条件不满足而未设置超时

ZPEXPIREAT

语法

    ZPEXPIREAT key unix-time-milliseconds [NX | XX | GT | LT] MEMBERS nummembers member [member ...]

与 HEXPIREAT 类似,但使用毫秒而不是秒的 Unix 时间戳。

该命令支持多个选项来控制何时设置过期:

  • NX: 仅对没有现有超时的成员设置过期
  • XX: 仅对已设置超时的成员设置过期
  • GT: 仅当过期时间大于当前过期时间时才设置过期
  • LT: 仅当过期时间小于当前过期时间时才设置过期

NXXXGTLT 选项是互斥的。

Resp 回复

数组回复:对于每个成员,返回

  • 1 如果设置了超时
  • 0 如果成员不存在
  • -1 如果由于条件不满足而未设置超时

ZTTL

语法

    ZTTL key MEMBERS nummembers member [member ...]

返回设置了超时的一个或多个有序集合成员的剩余生存时间(以秒为单位)。

Resp 回复

数组回复:对于每个成员,返回

  • 如果成员存在且设置了过期时间,则为以秒为单位的 TTL
  • -1 如果成员存在但未设置过期时间
  • -2 如果成员不存在

ZPTTL

语法

    ZPTTL key MEMBERS nummembers member [member ...]

与 HTTL 类似,但返回剩余生存时间(以毫秒而不是秒为单位)。

Resp 回复

数组回复:对于每个成员,返回

  • 如果成员存在且设置了过期时间,则为以毫秒为单位的 TTL
  • -1 如果成员存在但未设置过期时间
  • -2 如果成员不存在

ZEXPIRETIME

语法

    ZEXPIRETIME key MEMBERS nummembers member [member ...]

返回指定有序集合成员将过期的绝对 Unix 时间戳(以秒为单位)。

Resp 回复

数组回复:对于每个成员,返回

  • 成员过期时的 Unix 时间戳(以秒为单位)
  • -1 如果成员存在但未设置过期时间
  • -2 如果成员不存在

ZPEXPIRETIME

语法

    ZPEXPIRETIME key MEMBERS nummembers member [member ...]

与 HEXPIRETIME 类似,但返回以毫秒而不是秒为单位的过期时间戳。

Resp 回复

数组回复:对于每个成员,返回

  • 成员过期时的 Unix 时间戳(以毫秒为单位)
  • -1 如果成员存在但未设置过期时间
  • -2 如果成员不存在

ZPERSIST

语法

    ZPERSIST key MEMBERS nummembers member [member ...]

从指定的有序集合成员中删除过期时间,使其持久化。

Resp 回复

数组回复:对于每个成员,返回

  • 1 如果超时已删除
  • 0 如果成员存在但没有超时
  • -1 如果成员不存在

ZCOLLECT

语法

    ZCOLLECT key [key ...]

手动触发清除给定哈希集合键的内存中已过期成员。

使用 * 作为键从所有有序集合键中收集。

Resp 回复

简单回复:OK 响应 错误回复:ERR ZCOLLECT 扫描已在进行中


地理空间索引

GEOADD

语法

    GEOADD key [NX | XX] [CH] longitude latitude member [longitude latitude member ... ]

将指定的地理空间项目(经度、纬度、名称)添加到指定的键。数据以有序集合的形式存储在键中,这样就可以使用 GEOSEARCH 命令查询项目。

该命令以标准格式 x,y 接受参数,因此必须在纬度之前指定经度。可索引的坐标有限制:非常靠近极点的区域不可索引。

确切的限制如下:

  • 有效经度范围为 -180 到 180 度。
  • 有效纬度范围为 -85.05112878 到 85.05112878 度。

当用户尝试索引超出指定范围的坐标时,该命令将报告错误。

注意:没有 GEODEL 命令,因为您可以使用 ZREM 来删除元素。地理索引结构是有序集合。

GEOADD 还提供以下选项:

  • XX: 仅更新已存在的元素。从不添加元素。
  • NX: 不更新已存在的元素。始终添加新元素。
  • CH: 将返回值从添加的新元素数量更改为更改的元素总数(CH 是 changed 的缩写)。

更改的元素是新添加的元素和已存在的但坐标已更新的元素。因此,命令中指定的与过去具有相同分数的元素不计入在内。注意:通常,GEOADD 的返回值仅计算添加的新元素数量。

注意:XXNX 选项是互斥的。


GEODIST

语法

    GEODIST key member1 member2 [M|KM|FT|MI]

返回由有序集合表示的地理空间索引中两个成员之间的距离。

给定一个表示地理空间索引的有序集合,使用 GEOADD 命令填充,该命令返回两个指定成员在指定单位中的距离。

如果一个或两个成员都缺失,该命令返回 NULL。

单位必须是以下之一,默认为米:

  • m 表示米。
  • km 表示千米。
  • mi 表示英里。
  • ft 表示英尺。

距离计算假设地球是一个完美的球体,因此在极端情况下可能存在高达 0.5% 的误差。


GEOHASH

语法

    GEOHASH key [member [member ...]]

返回表示一个或多个元素在地理空间索引(其中元素使用 GEOADD 添加)的有序集合值中的位置的有效 Geohash 字符串。


GEOPOS

语法

    GEOPOS key [member [member ...]]

返回由键处的有序集合表示的地理空间索引中所有指定成员的位置(经度、纬度)。

给定一个表示地理空间索引的有序集合,使用 GEOADD 命令填充,通常获取指定成员的坐标会很有用。当通过 GEOADD 填充地理空间索引时,坐标会转换为 52 位 geohash,因此返回的坐标可能与用于添加元素的坐标不完全相同,但可能会引入小错误。

该命令可以接受可变数量的参数,因此即使指定单个元素,它也始终返回位置数组。


GEORADIUS

语法

GEORADIUS_RO key longitude latitude radius <M | KM | FT | MI>
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]
[STORE key | STOREDIST key]

返回使用 GEOADD 填充的有序集合中的成员,这些成员位于由中心位置和距中心的最大距离(半径)指定的区域边界内。

此命令的常见用例是检索距离指定点不超过给定米数(或其他单位)的地理空间项目。例如,这允许向应用程序的移动用户推荐附近地点。

半径以以下单位之一指定:

  • m 表示米。
  • km 表示千米。
  • mi 表示英里。
  • ft 表示英尺。

该命令可选地使用以下选项返回附加信息:

  • WITHDIST: 同时返回返回项目距指定中心点的距离。距离以与命令的半径参数相同的单位返回。
  • WITHCOORD: 同时返回匹配项目的经度和纬度。
  • WITHHASH: 同时返回项目的原始 geohash 编码有序集合分数,形式为 52 位无符号整数。这仅适用于低级黑客或调试,对普通用户而言几乎没有兴趣。

该命令默认返回未排序的项目。可以使用以下两个选项调用两种不同的排序方法:

  • ASC: 根据中心点,将返回项目从最近到最远排序。
  • DESC: 根据中心点,将返回项目从最远到最近排序。

默认情况下,返回所有匹配项目。可以使用 COUNT 选项将结果限制为前 N 个匹配项目。当提供 ANY 时,命令会在找到足够的匹配项后立即返回,因此结果可能不是最接近指定点的项目,但另一方面,服务器投入的精力会显著降低。未提供 ANY 时,命令将执行与匹配指定区域的项目数量成比例的工作并对其进行排序,因此即使只返回少量结果,查询非常大的区域并使用非常小的 COUNT 选项也可能很慢。

默认情况下,该命令将项目返回给客户端。可以使用以下选项之一存储结果:

  • STORE: 将项目存储在填充有其地理空间信息的有序集合中。
  • STOREDIST: 将项目存储在填充有它们与中心点距离(以浮点数表示,与半径中指定的单位相同)的有序集合中。

回复:

以下之一

  • 如果指定了 STORE 或 STOREDIST 选项,则为结果集中的元素数量(整数)。
  • 如果未指定 WITH* 选项,则为匹配成员名称的数组回复。
  • 如果指定了 WITHCOORD、WITHDIST 或 WITHHASH 选项,则命令返回一个数组回复的数组,其中每个子数组表示单个项目:
    • 与半径中指定的单位相同的,以浮点数表示的与中心的距离。
    • Geohash 整数。
    • 坐标,以两个项目 x,y 数组(经度,纬度)表示。

GEORADIUS_RO

语法

GEORADIUS_RO key longitude latitude radius <M | KM | FT | MI>
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]

返回使用 GEOADD 填充的有序集合中的成员,这些成员位于由中心位置和距中心的最大距离(半径)指定的区域边界内。

此命令的常见用例是检索距离指定点不超过给定米数(或其他单位)的地理空间项目。例如,这允许向应用程序的移动用户推荐附近地点。

半径以以下单位之一指定:

  • m 表示米。
  • km 表示千米。
  • mi 表示英里。
  • ft 表示英尺。

该命令可选地使用以下选项返回附加信息:

  • WITHDIST: 同时返回返回项目距指定中心点的距离。距离以与命令的半径参数相同的单位返回。
  • WITHCOORD: 同时返回匹配项目的经度和纬度。
  • WITHHASH: 同时返回项目的原始 geohash 编码有序集合分数,形式为 52 位无符号整数。这仅适用于低级黑客或调试,对普通用户而言几乎没有兴趣。

该命令默认返回未排序的项目。可以使用以下两个选项调用两种不同的排序方法:

  • ASC: 根据中心点,将返回项目从最近到最远排序。
  • DESC: 根据中心点,将返回项目从最远到最近排序。

默认情况下,返回所有匹配项目。可以使用 COUNT 选项将结果限制为前 N 个匹配项目。当提供 ANY 时,命令会在找到足够的匹配项后立即返回,因此结果可能不是最接近指定点的项目,但另一方面,服务器投入的精力会显著降低。未提供 ANY 时,命令将执行与匹配指定区域的项目数量成比例的工作并对其进行排序,因此即使只返回少量结果,查询非常大的区域并使用非常小的 COUNT 选项也可能很慢。

回复:

以下之一

  • 如果未指定 WITH* 选项,则为匹配成员名称的数组回复。
  • 如果指定了 WITHCOORD、WITHDIST 或 WITHHASH 选项,则命令返回一个数组回复的数组,其中每个子数组表示单个项目:
    • 与半径中指定的单位相同的,以浮点数表示的与中心的距离。
    • Geohash 整数。
    • 坐标,以两个项目 x,y 数组(经度,纬度)表示。

GEORADIUSBYMEMBER

语法

GEORADIUSBYMEMBER_RO key member radius <M | KM | FT | MI>
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]
[STORE key | STOREDIST key]

此命令与 GEORADIUS 完全相同,唯一的区别是:它不将经纬度值作为查询区域的中心,而是将地理空间索引(由有序集合表示)中已存在的成员名称作为查询区域的中心。

指定成员的位置将用作查询的中心。


GEORADIUSBYMEMBER_RO

语法

GEORADIUSBYMEMBER_RO key member radius <M | KM | FT | MI>
[WITHCOORD] [WITHDIST] [WITHHASH] [COUNT count [ANY]] [ASC | DESC]

此命令与 GEORADIUS_RO 完全相同,唯一的区别是:它不将经纬度值作为查询区域的中心,而是将地理空间索引(由有序集合表示)中已存在的成员名称作为查询区域的中心。

指定成员的位置将用作查询的中心。


GEOSEARCH

语法

    GEOSEARCH key <FROMMEMBER member | FROMLONLAT longitude latitude>
<BYRADIUS radius <M | KM | FT | MI> | BYBOX width height <M | KM |
FT | MI>> [ASC | DESC] [COUNT count [ANY]] [WITHCOORD] [WITHDIST]
[WITHHASH]

返回使用 GEOADD 填充的有序集合的成员,这些成员位于给定形状指定区域的边界内。

查询的中心点由以下强制选项之一提供:

  • FROMMEMBER: 使用有序集合中给定现有成员的位置。
  • FROMLONLAT: 使用给定的经度纬度位置。

查询的形状由以下选项提供:

  • BYRADIUS: 类似于 GEORADIUS,根据给定的半径在圆形区域内搜索。
  • BYBOX: 在由高度宽度确定的轴对齐矩形内搜索。

该命令可选地使用以下选项返回附加信息:

  • WITHDIST: 还返回返回项目与指定中心点的距离。距离以与半径或高度和宽度参数相同的单位返回。
  • WITHCOORD: 同时返回匹配项目的经度和纬度。
  • WITHHASH: 同时返回项目的原始 geohash 编码有序集合分数,形式为 52 位无符号整数。这仅适用于低级黑客或调试,对普通用户而言几乎没有兴趣。

匹配项默认情况下不排序返回。若要对它们进行排序,请使用以下两个选项之一:

  • ASC: 根据中心点,将返回项目从最近到最远排序。
  • DESC: 根据中心点,将返回项目从最远到最近排序。

默认情况下返回所有匹配项。若要将结果限制为前 N 个匹配项,请使用 COUNT count 选项。当使用 ANY 选项时,一旦找到足够的匹配项,命令就会立即返回。这意味着返回的结果可能不是最接近指定点的那些,但服务器为生成它们所付出的努力显著减少。当未提供 ANY 时,命令将执行与匹配指定区域的项数量成比例的努力并对其进行排序,因此,即使只返回少量结果,使用非常小的 COUNT 选项查询非常大的区域也可能很慢。

回复:

以下之一

  • 如果未指定 WITH* 选项,则为匹配成员名称的数组回复。
  • 如果指定了 WITHCOORD、WITHDIST 或 WITHHASH 选项,则命令返回一个数组回复的数组,其中每个子数组表示单个项目:
    • 与半径中指定的单位相同的,以浮点数表示的与中心的距离。
    • Geohash 整数。
    • 坐标,以两个项目 x,y 数组(经度,纬度)表示。

GEOSEARCHSTORE

语法

GEOSEARCHSTORE destination source <FROMMEMBER member |
FROMLONLAT longitude latitude> <BYRADIUS radius <m | km | ft | mi>
| BYBOX width height <m | km | ft | mi>> [ASC | DESC] [COUNT count
[ANY]] [STOREDIST]

此命令类似于 GEOSEARCH,但将结果存储在目标键中。

当使用 STOREDIST 选项时,命令会将项目存储在一个有序集合中,其中包含它们与圆形或盒子中心的距离(以浮点数表示),单位与该形状指定的单位相同。

回复:

整数回复:结果集中元素的数量