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

命令限制

最近更新时间2024.02.07 12:41:53

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

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

支持的命令

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

多 Key 命令限制

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

命令族具体命令
Keys 命令族UNLINK、TOUCH、EXISTS、RENAME、RENAMENX、SORT、DEL
Sets 命令族SMOVE、SINTER、SINTERSTORE、SUNION、SUNIONSTORE、SDIFF、SDIFFSTORE
Strings 命令族BITOP、MSETNX、MGET、MSET
SortedSets 命令族BZPOPMIN、BZPOPMAX、ZUNIONSTORE、ZINTERSTORE
Scripting 命令族EVAL、EVALSHA
Streams 命令族XREAD、XREADGROUP
Transaction 命令族WATCH
HyperLogLog 命令族PFCOUNT、PFMERGE
Lists 命令族BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH

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

  • 启用分片集群的 Redis 实例

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

      命令族具体命令
      Keys 命令族UNLINK、TOUCH、EXISTS、RENAME、RENAMENX、SORT
      Sets 命令族SMOVE
      Strings 命令族BITOP、MSETNX
      SortedSets 命令族BZPOPMIN、BZPOPMAX、ZUNIONSTORE、ZINTERSTORE
      Scripting 命令族EVAL、EVALSHA
      Streams 命令族XREAD、XREADGROUP
      Transaction 命令族WATCH
      HyperLogLog 命令族PFCOUNT、PFMERGE
      Lists 命令族BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH

      说明

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

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

事务命令限制

  • 启用分片集群的 Redis 实例

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

      说明

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

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

    命令族具体命令
    Connection 命令族HELLO、AUTH、PING、CLIENT GETNAME、CLIENT SETNAME、CLIENT LIST、CLIENT ID、CLIENT KILL
    Transaction 命令族WATCH、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 的报错。参数修改方法,请参见设置实例参数
  • 关于 Redis 支持的参数和命令详情,请参见参数支持命令支持

其它命令限制

  • 启用分片集群的 Redis 实例

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