You need to enable JavaScript to run this app.
导航
ExString
最近更新时间:2025.04.23 11:30:32首次发布时间:2025.02.14 10:49:17
我的收藏
有用
有用
无用
无用

缓存数据库 Redis 版支持带版本号的 String 类型数据结构 ExString,本文介绍 ExString 数据支持的命令。

前提条件

  • 实例的版本需同时满足如下要求才可使用 ExString 数据结构:
    • 数据库版本需为 Redis 7.0。
    • Proxy 小版本需大于等于 1.22.0。
    • Serve 小版本需大于等于 7.17.3。

    说明

    您可以在实例信息查看实例的数据库版本和小版本信息,具体操作步骤,请参见查看实例信息

  • 实例状态需为运行中。关于实例状态的更多说明,请参见实例状态

功能特性

缓存数据库 Redis 版提供的 ExString 在原生 Redis String 数据结构的基础上,额外支持了如下特性:

  • 支持携带版本(version)信息,且版本信息允许修改。
  • ExString 在 Redis String 加减功能的基础上支持了边界设置,可以将 INCRBY、INCRBYFLOAT 的结果限制在一定的范围内,超出范围则提示错误。

命令语法

命令列表

ExString 支持的命令如下表所示。

说明

针对下表中的命令语法,定义如下:

  • 大写关键字:命令关键字,如 EXSET
  • 小写关键字:可自定义的参数。
  • [][] 内的为可选参数,不在 [] 内的为必选参数。
  • <可选项 1>|<可选项 2>|<可选项 N>:一组互斥的参数可选项,即仅支持从可选项中选择一个参数进行设置。
命令语法说明
EXSETEXSET key value [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL]创建一个值为 value 的新 key;或为已存在的 key 设置一个新的 value。
EXGETEXGET key查询指定 key 的 value 与 version 信息。
EXSETVEREXSETVER key version设置指定 key 的 version。
EXINCRBYEXINCRBY key num [MIN minval] [MAX maxval] [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version][KEEPTTL]对指定 key 的 value 进行增、减操作,num 的取值类型为 LONG。
EXINCRBYFLOAT[EXINCRBYFLOAT key num [MIN minval] [MAX maxval] [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL]对指定 key 的 value 进行增、减操作,num 的取值类型为 DOUBLE。
EXCASEXCAS key newvalue version当传入的 version 与指定 key 的 version 一致时,则使用传入的 newvalue 覆盖原来的 value;若 version 不一致,则返回 key 当前的 value 和 version 信息。
EXCADEXCAD key version当传入的 version 与指定 key 的 version 一致时,则删除 key。

注意事项

  • 当前 ExString 功能正处于灰度发布中,如需使用,请提交工单联系技术支持申请使用。
  • 申请完成后,拥有 Administrator 角色的账号默认具备 ExString 相关命令的所有权限。您也可以根据业务需要创建一个允许使用所有 ExString 类命令的新角色(即该角色的 ACL 规则需设置为 +@exstring),创建角色后,您需要通过拥有该角色的账号登录 Redis 后即可使用 ExString 相关命令。创建角色的具体操作步骤,请参见创建角色
  • 缓存数据库 Redis 版支持对 ExString 数据类型进行大、热 Key 分析,能够帮助及时发现并分析数据库中的热 Key 和大 Key 详情,为您优化热 Key 和大 Key 提供数据参考。具体操作步骤,请参见大 Key 分析热 Key 分析
  • 成功申请使用 ExString 功能后,实例将不再支持任何数据恢复功能,包括:
  • 缓存数据库 Redis 版未提供删除 ExString 的命令,但您可以使用如下原生 Redis 命令实现删除 ExString 的目的。
    命令语法说明
    EXPIREEXPIRE key seconds [NX | XX | GT | LT]设置 ExString 的超时时间,超过该时间的 ExString 会被自动删除。
    UNLINKUNLINK key [key ...]异步删除一个或多个 ExString。当通过 UNLINK 命令删除 ExString 时,这些 ExString 会被标记为待删除状态,而真正的删除操作会放在后台线程中进行,不会阻塞 Redis 的当前进程。
    DELDEL key [key ...]同步删除一个或多个 ExString。当通过 DEL 命令删除 ExString 时,删除操作会立即阻塞 Redis 当前线程,直到这些 ExString 对应的内存空间被完全回收释放。如果待删除的 ExString 数据量过大,可能会影响 Redis 整体性能。

EXSET

类别说明
命令语法EXSET key value [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL]
时间复杂度O(1)。
命令描述创建一个值为 value 的新 key;或为已存在的 key 设置一个新的 value。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。
  • value:为 key 所设的 value。
  • EX:指定 key 的相对过期时间,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • EXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • PX:指定 key 的相对过期时间,单位:毫秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • PXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:毫秒 ,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • NX:仅当 key 不存在时写入数据。
  • XX:仅当 key 存在时写入数据。
  • VER:版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。场景不同,版本号生效情况不同,其中:
    • 若 key 存在:
      • 且传入的版本号和 key 当前的版本号相等,那么直接写入 value,且版本号会在原来的版本号基础上加 1。
      • 但传入的版本号和 key 当前的版本号不相等,那么拒绝写入 value 并返回异常信息。
    • 若 key 不存在,那么忽略传入的版本号直接写入 value,写入成功后版本号变为 1。
  • ABS:绝对版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。设置后会直接写入 value,并将 key 的版本号修改为该选项所设的版本号。
  • KEEPTTL:延用该 key 已设置的过期时间(Time to live,TTL 信息)。

    说明

    • KEEPTTL 不能与 EXPXEXATPXAT 参数同时设置。
    • 若未设置 KEEPTTL 参数,也未设置 EXEXATPXPXAT 等设置过期时间的参数,则该 key 已设置的过期时间将被删除,即该 key 不会过期。

返回值

  • OK:执行成功。
  • nil:指定了 XX 参数但 key 不存在,或指定了 NX 参数但 key 已经存在。
  • 其它情况返回相应的异常信息(如 invalid argumentsupdate version is stale 等)。

示例

  • 命令示例一
    创建一个 key 名称为 test_exstring ,值为 test_value1 的 ExString,并将该 ExString 的相对过期时间设置为 10 秒,绝对版本号为 100,仅指定仅当 key 不存在时写入。
    EXSET test_exstring test_value1 EX 10 NX ABS 100
    
    返回示例。
    OK
    
  • 命令示例二
    为已存在的 ExString test_exstring 赋一个新值 test_value2,并将该 ExString 的绝对过期时间设置为 100 毫秒,版本号为 100,仅指定仅当 key 存在时写入。
    EXSET test_exstring test_value2 PXAT 1739455218750 XX VER 100
    
    返回示例。
    OK
    

EXGET

类别说明
命令语法EXGET key
时间复杂度O(1)。
命令描述查询指定 key 的 value 与 version 信息。
选项key:key 名称,用于指定作为命令调用对象的 ExString。

返回值

  • 执行成功时,会返回指定 key 的 value 与 version 信息。
  • 其它情况返回相应的异常信息(如 nilwrong number of arguments for command 等)。

示例

命令示例。

EXGET test_exstring

返回示例。

1) test_value1
2) 100

EXSETVER

类别说明
命令语法EXSETVER key version
时间复杂度O(1)。
命令描述设置指定 key 的 version。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。
  • version:需要设置的版本号,取值范围为 0 ~ Integer 数据类型允许的最大值。

返回值

  • 1:执行成功。
  • 0:指定的 key 不存在。
  • 其它情况返回相应的异常信息(如 syntax error 等)。

示例

命令示例。

EXSETVER test_exstring 66

返回示例。

1

EXINCRBY

类别说明
命令语法EXINCRBY key num [MIN minval] [MAX maxval] [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version][KEEPTTL]
时间复杂度O(1)。
命令描述对指定 key 的 value 进行增、减操作,num 的取值类型为 LONG。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。
  • num: 需要进行增、减的数值,取值必须为整数,其中正整数为需要增加的数值,负整数为需要减少的数值。
  • MIN:设置指定 key 的 value 最小值。
  • MAX:设置指定 key 的 value 最大值。
  • EX:指定 key 的相对过期时间,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • EXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • PX:指定 key 的相对过期时间,单位:毫秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • PXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:毫秒 ,0 表示立即过期,不设置该参数表示 key 没有过期时间。
  • NX:仅当 key 不存在时写入数据。
  • XX:仅当 key 存在时写入数据。
  • VER:版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。场景不同,版本号生效情况不同,其中:
    • 若 key 存在:
      • 且传入的版本号和 key 当前的版本号相等,那么直接进行增减操作,且版本号会在原来的版本号基础上加 1。
      • 但传入的版本号和 key 当前的版本号不相等,那么拒绝进行增加操作并返回异常信息。
  • ABS:绝对版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。设置后会直接进行增减操作,并将 key 的版本号修改为该选项所设的版本号。
  • KEEPTTL:延用该 key 已设置的过期时间(Time to live,TTL 信息)。

    说明

    • KEEPTTL 不能与 EXPXEXATPXAT 参数同时设置。
    • 若未设置 KEEPTTL 参数,也未设置 EXEXATPXPXAT 等设置过期时间的参数,则该 key 已设置的过期时间将被删除,即该 key 不会过期。

返回值

  • 执行成功时,会返回进行增减操作后获得的 value 值。
  • 当设置了 MAXMIN,且进行自增或自减操作后获得的 value 超过了该范围时,会返回 increment or decrement would overflow
  • 其它情况返回相应的异常信息(如 update version is stale 等)。

示例

假设已使用 EXSET test_exstring1 25 ABS 100 命令创建了一个 ExString。
您可以通过如下命令,在原值基础上再加上 15.

EXINCRBY test_exstring1 15 MIN 35 VER 100

返回示例。

40

EXINCRBYFLOAT

类别说明
命令语法[EXINCRBYFLOAT key num [MIN minval] [MAX maxval] [EX|PX|EXAT|PXAT time] [NX|XX] [VER|ABS version] [KEEPTTL]
时间复杂度O(1)。
命令描述对指定 key 的 value 进行增、减操作,num 的取值类型为 DOUBLE。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。

  • num: 需要进行增、减的数值,取值必须为浮点数,其中正浮点数为需要增加的数值,负浮点数为需要减少的数值。

  • MIN:设置指定 key 的 value 最小值。

  • MAX:设置指定 key 的 value 最大值。

  • EX:指定 key 的相对过期时间,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。

  • EXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。

  • PX:指定 key 的相对过期时间,单位:毫秒,0 表示立即过期,不设置该参数表示 key 没有过期时间。

  • PXAT:指定 key 的绝对过期时间,格式为 Unix 时间戳,单位:毫秒 ,0 表示立即过期,不设置该参数表示 key 没有过期时间。

  • NX:仅当 key 不存在时写入数据。

  • XX:仅当 key 存在时写入数据。

  • VER:版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。场景不同,版本号生效情况不同,其中:

    • 若 key 存在:
      • 且传入的版本号和 key 当前的版本号相等,那么直接进行增减操作,且版本号会在原来的版本号基础上加 1。
      • 但传入的版本号和 key 当前的版本号不相等,那么拒绝进行增加操作并返回异常信息。
  • ABS:绝对版本号。取值范围为 0 ~ Integer 数据类型允许的最大值。设置后会直接进行增减操作,并将 key 的版本号修改为该选项所设的版本号。

  • KEEPTTL:延用该 key 已设置的过期时间(Time to live,TTL 信息)。

    说明

    • KEEPTTL 不能与 EXPXEXATPXAT 参数同时设置。
    • 若未设置 KEEPTTL 参数,也未设置 EXEXATPXPXAT 等设置过期时间的参数,则该 key 已设置的过期时间将被删除,即该 key 不会过期。

返回值

  • 执行成功时,会返回进行增减操作后获得的 value 值。
  • 当设置了 MAXMIN,且进行自增或自减操作后获得的 value 超过了该范围时,会返回 increment or decrement would overflow
  • 其它情况返回相应的异常信息(如 update version is stale 等)。

示例

假设已使用 EXSET test_exstring1 25 ABS 100 命令创建了一个 ExString。
您可以通过如下命令,在原值的基础上再减去 3.1415926.

EXINCRBYFLOAT test_exstring1 -3.1415926 MAX 100 VER 100

返回示例。

21.8584074

EXCAS

类别说明
命令语法EXCAS key newvalue version
时间复杂度O(1)。
命令描述当传入的 version 与指定 key 的 version 一致时,则使用传入的 newvalue 覆盖原来的 value;若 version 不一致,则返回 key 当前的 value 和 version 信息。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。
  • newvalue:若传入的 version 与指定 key 的 version 一致时,则使用传入的 newvalue 覆盖原来的 value。
  • version:用于与指定 key 当前 version 相比较的 version 值,取值范围为 0 ~ Integer 数据类型允许的最大值。

返回值

  • OK:命令执行成功,且同时会返回一行空字符串,以及 key 最新的 version 信息。
  • CAS_FAILED:命令执行失败,且同时会返回 key 当前的 value 和 version 版本。
  • -1:指定 key 不存在。
  • 其它情况返回相应的异常信息(如 syntax errorversion should be integer 等)。

示例

假设已存在一个 ExString test_exstring1 且需要将该 ExString 的 value 改为 66,但不确定其当前的 value 和 version。
您可以在如下命令中输入一个任意 version(例如 35),并尝试将原值修改为 66。

EXCAS test_exstring1 66 35

返回示例。

1) CAS_FAILED
2) 30
3) 100

从上述返回结果可知 test_exstring2 当前的 value 为 30, version 为 100,那么您可以通过如下命令将原值修改为 66。

EXCAS test_exstring1 66 100

返回示例。

1) OK
2)
3) 101

EXCAD

类别说明
命令语法EXCAD key version
时间复杂度O(1)。
命令描述当传入的 version 与指定 key 的 version 一致时,则删除 key。

选项

  • key:key 名称,用于指定作为命令调用对象的 ExString。
  • version:用于与指定 key 当前 version 相比较的 version 值,取值范围为 0 ~ Integer 数据类型允许的最大值。

返回值

  • 1:执行成功。
  • 0:执行失败。
  • -1:指定 key 不存在。
  • 其它情况返回相应的异常信息(如 syntax errorversion should be integer 等)。

示例

假设已存在一个 version 为 100 的 ExString test_exstring1

  • 当您使用如下命令时,删除 test_exstring1 会失败。
    EXCAD test_exstring1 101
    
    返回示例。
    0
    
  • 当您使用如下命令时,可成功删除 test_exstring1
    EXCAD test_exstring1 101
    
    返回示例。
    1