跳到主要内容

Garnet 特有命令

除了 Garnet 的服务器扩展之外,我们还支持许多在其他 RESP 服务器中不可用的 API 调用。下文将对此进行描述。

FORCEGC

语法

    FORCEGC [generation]

在服务器端调用垃圾回收。可选地,指定回收的代级别。有关更多信息,请参阅此文章

Resp 回复

简单字符串回复:OK。


COMMITAOF

语法

    COMMITAOF [DBID]

对仅追加文件(针对 Garnet 实例中的所有活动数据库)发出手动提交。当自动提交关闭但您需要在特定时间提交系统时,这很有用。如果指定了数据库 ID,将对该特定数据库的仅追加文件发出手动提交。

Resp 回复

简单字符串回复:OK。


HCOLLECT

语法

    HCOLLECT key [key ...]

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

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

Resp 回复

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


ZCOLLECT

语法

    ZCOLLECT key [key ...]

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

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

Resp 回复

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


COSCAN

语法

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

自定义对象扫描类似于 HSCANSSCAN。它迭代存储在给定键处的自定义对象的字段和值。

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

您可以使用 NOVALUES 选项使 Garnet 只返回键而不返回其对应的值。


SECONDARYOF

将服务器配置为另一个服务器的 secondary,或将其提升为 primary。与 REPLICAOF 相同。


REGISTERCS

这允许在服务器端 DLL 库中注册用 C# 实现的特定自定义命令和事务。有关详细信息,请参阅此页面


RUNTXP

语法

    RUNTXP txid [args]

运行由其 ID 标识的特定自定义事务过程。


WATCHMS

语法

    WATCHMS key [key ...]

WATCH 相同,但指定键仅存在于主(原始字符串)存储中。


WATCHOS

语法

    WATCHOS key [key ...]

WATCH 相同,但指定键仅存在于对象存储中。


ASYNC

访问大于内存数据时的 Garnet 异步接口。有关详细信息,请参阅此链接


MODULE LOADCS

这相当于原始 RESP 协议中的 MODULE LOAD。它加载一个自包含模块,其中模块初始化代码自动注册所有相关命令和事务。有关详细信息,请参阅此页面


原生 ETag 支持

Garnet 为原始字符串提供 ETag 支持。通过使用下面概述的 ETag 相关命令,您可以将插入 Garnet 的任何**基于字符串的键值对**与自动更新的 ETag 相关联。

与非 ETag 命令的兼容性以及使用 ETag 插入数据的行为将在本文档末尾详细说明。要使用 ETag 初始化键值对,您可以使用带有新添加的“WITHETAG”可选标志的 SET 命令,或者您可以获取任何现有的键值对并使用 ETag 参数为 0 调用 SETIFMATCH(任何没有显式 ETag 的键值对都隐式具有 ETag 0)。在此处阅读更多关于 ETag 用例和模式的信息


SET (WITHETAG)

语法

    SET key value [NX | XX] [EX seconds | PX milliseconds] [KEEPTTL] WITHETAG

设置 key 以保存字符串值和 ETag。如果 key 已经保存了一个值,它将被覆盖,无论其类型如何。与 key 关联的任何先前的生存时间在成功的 SET 操作中都会被丢弃。

选项

  • EX seconds -- 设置指定的过期时间,以秒为单位(正整数)。
  • PX milliseconds -- 设置指定的过期时间,以毫秒为单位(正整数)。
  • NX -- 仅当键不存在时才设置键。
  • XX -- 仅当键已存在时才设置键。
  • KEEPTTL -- 保留与键关联的生存时间。
  • WITHETAG -- 添加此项会将键值对设置为初始 ETag,如果对现有带有 ETag 的键值对调用,此命令将透明地更新 ETag。

Resp 回复

  • 整数回复:给定 WITHETAG:与该值关联的 ETag。

GETWITHETAG

语法

GETWITHETAG key

检索与给定键关联的值和 ETag。

回复

以下之一

  • 数组回复:成功时返回包含两个项的数组。第一项是表示 ETag 的整数,第二项是键的批量字符串值。如果对没有 ETag 的键值对调用,etag 将为 0。
  • Nil 回复:如果键不存在。

SETIFMATCH

语法

SETIFMATCH key value etag [EX seconds | PX milliseconds] [NOGET]

仅当 (1) 请求中给定的 etag 与已存在的 etag 匹配;或 (2) 不存在现有值;或 (3) 现有值未与任何 etag 关联且发送的 etag 为 0 时,才设置/更新具有给定 etag 的键值对。

选项

  • EX seconds -- 设置指定的过期时间,以秒为单位(正整数)。
  • PX milliseconds -- 设置指定的过期时间,以毫秒为单位(正整数)。
  • NOGET -- 即使 etag 不匹配,也不返回该值

回复

  • 数组回复:如果发送的 etag 与现有 etag 匹配,则返回一个数组,其中第一项是更新后的 etag,第二项为 nil。如果 etag 不匹配,则响应数组将按顺序包含最新的 etag 和最新的值。

SETIFGREATER

语法

SETIFGREATER key value etag [EX seconds | PX milliseconds] [NOGET]

仅当 (1) 请求中给定的 etag 大于已存在的 etag;或 (2) 不存在现有值;或 (3) 现有值未与任何 etag 关联且发送的 etag 大于 0 时,才设置/更新具有给定 etag 的键值对。

选项

  • EX seconds -- 设置指定的过期时间,以秒为单位(正整数)。
  • PX milliseconds -- 设置指定的过期时间,以毫秒为单位(正整数)。
  • NOGET -- 即使发送的 etag 不大于现有 etag,也不返回该值。

回复

  • 数组回复:如果发送的 etag 大于现有 etag,则返回一个数组,其中第一项是更新后的 etag,第二项为 nil。如果发送的 etag 小于或等于现有 etag,则响应数组将按顺序包含最新的 etag 和最新的值。

GETIFNOTMATCH

语法

GETIFNOTMATCH key etag

如果与键关联的 ETag 已更改,则检索该值;否则,返回表示未更改的响应。

回复

以下之一

  • 数组回复:如果 ETag 不匹配,则返回一个包含两个项的数组。第一项是最新 ETag,第二项是与键关联的值。如果 ETag 匹配,则响应数组中的第一项是 etag,第二项为 nil。
  • Nil 回复:如果键不存在。

DELIFGREATER

语法

DELIFGREATER key etag

仅当提供的 ETag 严格大于键的现有 ETag 时才删除键。

回复

  • 整数回复:如果键成功删除,则返回 1;否则,返回 0。

与非 ETag 命令的兼容性和行为

目前,集群模式下运行的服务器不支持 ETag。这将很快得到支持。

以下是使用非 ETag 命令时,与 ETag 关联的键值对的预期行为。

  • MSET、BITOP:这些命令将用非 ETag 键值对替换现有的 ETag 关联键值对,从而有效地删除 ETag。

  • SET:只有在与附加选项“WITHETAG”一起使用时,调用 SET 才会在插入新键值对覆盖现有键值对时更新 etag。

  • RENAME:RENAME 有一个 WITHETAG 选项。当调用 WITHETAG 时,如果被重命名的键不存在,它将使用 etag 重命名该键;否则,它将增加被重命名键的现有 etag。

  • 自定义命令:虽然基于 etag 的键值对**可以在自定义事务和自定义过程中盲目使用**,但**不支持在自定义原始字符串函数中使用** ETag 设置的键值对。

所有其他命令如果修改底层数据,将在内部更新 etag,并且它们的任何响应都不会向客户端公开 etag。对于用户来说,在非 etag 命令中,etag 及其更新仍然是隐藏的。


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 扫描已在进行中