You need to enable JavaScript to run this app.
导航

命令限制

最近更新时间2024.04.11 15:59:58

首次发布时间2021.11.04 14:15:18

缓存数据库 Redis 版兼容大多数的原生 Redis 命令,但在使用部分命令时会有一些限制。本文汇总 Redis 实例中的命令限制。

支持的命令

关于缓存数据库 Redis 版支持的命令详情,请参见命令支持

多 Key 命令限制

Redis 支持的多 Key 命令如下表所示。

命令族具体命令
BitmapBITOP
GenericDEL、EXISTS、RENAME、RENAMENX、SORT、TOUCH、UNLINK
HyperLogLogPFCOUNT、PFMERGE
ListBLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH
Scripting and FunctionsEVAL、EVALSHA
SetSDIFF、SDIFFSTORE、SINTER、SINTERSTORE、SMOVE、SUNION、SUNIONSTORE
Sorted SetBZPOPMIN、BZPOPMAX、ZUNIONSTORE、ZINTERSTORE
StreamXREAD、XREADGROUP
StringMSETNX、MGET、MSET
TransactionsWATCH

但 Redis 的实例或连接地址类型不同,使用上述多 Key 命令时的限制也不同。具体限制如下:

  • 启用分片集群的 Redis 实例

    • 使用公网或私网地址连接实例时
      当使用下表中的任意多 Key 命令时,需要保证所要操作的 Key 都分布在 1 个 hash slot 中。

      命令族具体命令
      BitmapBITOP
      GenericEXISTS、RENAME、RENAMENX、SORT、TOUCH、UNLINK
      HyperLogLogPFCOUNT、PFMERGE
      ListBLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH
      Scripting and FunctionsEVAL、EVALSHA
      SetSMOVE
      Sorted SetBZPOPMIN、BZPOPMAX、ZINTERSTORE、ZUNIONSTORE
      StreamXREAD、XREADGROUP
      StringMSETNX
      TransactionsWATCH

      说明

    • 使用直连地址连接实例时
      在执行任何多 Key 命令时,需要保证命令所要操作的 Key 都分布在 1 个 hash slot 中。通过直连地址连接实例的方法,请参见通过直连地址连接实例

  • 不启用分片集群的 Redis 实例
    无相关限制。

事务命令限制

  • 启用分片集群的 Redis 实例

    • 支持通过公网或私网地址连接实例时使用事务命令,但在执行事务命令时,需要保证命令所要操作的 KEY 都分布在 1 个 hash slot 中。您可以通过 hash tag 来构造相同 slot 的 Key。hash tag 的使用方法,请参见 Keys hash tags

      说明

      您也可以提交工单联系技术支持通过设置相关参数,将事务中不同 slot 的命令拆分到不同分片,但此时无法保证事务的原子性。

    • 使用直连地址连接实例时,支持所有事务命令。
  • 不启用分片集群的 Redis 实例
    不启用分片集群的 Redis 实例不允许在事务中使用如下命令。

    命令族具体命令
    Connection ManagementHELLO、AUTH、PING、CLIENT GETNAME、CLIENT SETNAME、CLIENT LIST、CLIENT ID、CLIENT KILL
    TransactionsWATCH、UNWATCH

Lua 脚本使用限制

说明

关于 Lua 脚本使用的更多详情,请参见 Lua 脚本使用指南

  • 缓存数据库 Redis 版的实例类型不同,使用 Lua 脚本时的限制也不同。其中:

    • 启用分片集群的 Redis 实例

      • 所有 Key 都应该由 KEYS 数组来传递;redis.call/pcall 中调用的 Redis 命令,Key 的位置必须是 KEYS 数组。
      • numkeys 的取值需大于等于 1。
      • 所有 Key 必须在一个 slot 上。
      • Lua 脚本中 Key 参数的个数默认上限为 100。当 Key 个数超过上限时,会出现 command arguments invalid 报错。若需要提高默认上限(最多可提升至 100000),请提交工单联系技术支持。
    • 不启用分片集群的 Redis 实例
      不启用分片集群的 Redis 实例在使用 Lua 脚本时,Lua 脚本中 Key 参数的个数默认上限为 100。当 Key 个数超过上限时,会出现 command arguments invalid 报错。若需要提高默认上限(最多可提升至 100000),请提交工单联系技术支持。

  • 缓存数据库 Redis 版限制了部分命令不可在 Lua 脚本中使用。更多关于 Lua 脚本中支持使用的命令详情,请参见 Lua 脚本中支持的命令

高危命令限制

缓存数据库 Redis 版的实例类型不同,默认禁用的高危命令也不同。其中:

  • 未启用分片集群的 Redis 实例:默认禁用 flushallflushdbkeys 命令。
  • 启用分片集群的 Redis 实例:默认禁用 flushallkeys 命令。

说明

  • 高危命令默认禁用,仅当前实例支持的高危命令才会出现在禁用命令参数(disabled-commands)的默认值中。
  • 如需使用上述命令,需将对应的命令从禁用命令参数的默认值中移除。否则执行这些禁用命令时,会出现 no permission to execute the command 的报错。参数修改方法,请参见设置实例参数
  • 单个实例最多支持禁用 16 个命令,多个命令间用英文逗号(,)分隔。关于禁用命令的数量限制详情,请参见功能特性限制
  • 关于 Redis 支持的参数和命令详情,请参见参数支持命令支持

其它命令限制

  • 启用分片集群的 Redis 实例

    • 不支持在 SORT 命令中使用 GET 或 BY 参数。
    • 创建时间早于 2022 年 05 月 17 日的实例,仅支持 SELECT 0。
  • 不启用分片集群的 Redis 实例
    不支持在 SORT 命令中使用 GET 或 BY 参数。