缓存数据库 Redis 版兼容大多数的原生 Redis 命令,但在使用部分命令时会有一些限制。本文汇总 Redis 实例中的命令限制。
关于缓存数据库 Redis 版支持的命令详情,请参见命令支持。
Redis 支持的多 Key 命令如下表所示。
命令族 | 具体命令 |
---|---|
Bitmap | COPY、BITOP |
Generic | DEL、EXISTS、RENAME、RENAMENX、SORT、TOUCH、UNLINK |
Geospatial Indices | GEOSEARCHSTORE |
HyperLogLog | PFCOUNT、PFMERGE |
List | BLMOVE、BLMPOP、BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH、LMOVE、LMPOP |
Scripting and Functions | EVAL、EVAL_RO、EVALSHA、EVALSHA_RO、FCALL、FCALL_RO |
Set | SDIFF、SDIFFSTORE、SINTER、SINTERCARD、SINTERSTORE、SMOVE、SUNION、SUNIONSTORE |
Sorted Set | BZMPOP、BZPOPMIN、BZPOPMAX、ZDIFFSTORE、ZINTER、ZINTERCARD、ZINTERSTORE、ZMPOP、ZMSCORE、ZRANGESTORE、ZUNION、ZUNIONSTORE、ZDIFF |
Stream | XREAD、XREADGROUP |
String | MSETNX、MGET、MSET |
Transactions | WATCH |
但 Redis 的实例或连接地址类型不同,使用上述多 Key 命令时的限制也不同。具体限制如下:
启用分片集群的 Redis 实例
使用公网或私网地址连接实例时
当使用下表中的任意多 Key 命令时,需要保证所要操作的 Key 都分布在 1 个 hash slot 中。
命令族 | 具体命令 |
---|---|
Bitmap | COPY、BITOP |
Generic | RENAME、RENAMENX、SORT、TOUCH |
Geospatial Indices | GEOSEARCHSTORE |
HyperLogLog | PFCOUNT、PFMERGE |
List | BLMOVE、BLMPOP、BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH、LMOVE、LMPOP |
Scripting and Functions | EVAL、EVAL_RO、EVALSHA、EVALSHA_RO、FCALL、FCALL_RO |
Set | SINTERCARD |
Sorted Set | BZMPOP、BZPOPMIN、BZPOPMAX、ZDIFFSTORE、ZINTER、ZINTERCARD、ZMPOP、ZMSCORE、ZRANGESTORE、ZUNION、ZDIFF |
Stream | XREAD、XREADGROUP |
String | MSETNX |
Transactions | WATCH |
说明
使用直连地址连接实例时
在执行任何多 Key 命令时,需要保证命令所要操作的 Key 都分布在 1 个 hash slot 中。通过直连地址连接实例的方法,请参见通过直连地址连接实例。
不启用分片集群的 Redis 实例
无相关限制。
无论是启用分片集群还是未启用分片集群的 Redis 实例,均不允许在事务中使用如下命令。
说明
缓存数据库 Redis 版支持的事务命令详情,请参见命令支持—Transactions。
命令族 | 具体命令 |
---|---|
Connection Management | HELLO、AUTH、PING、CLIENT GETNAME、CLIENT SETNAME、CLIENT LIST、CLIENT ID、CLIENT KILL |
针对启用分片集群 Redis 实例,无论是通过代理模式(即使用公私网地址)还是直连模式(即使用直连地址)连接实例,在执行事务命令时,均需要保证命令所要操作的 Key 都分布在 1 个 hash slot 中。您可以通过 hash tag 来构造相同 slot 的 Key。hash tag 的使用方法,请参见 Keys hash tags。
说明
TransactionSplit
参数为 true
,来允许事务命令所要操作的 key 在不同 slot 中,但此时无法保证事务的原子性。参数修改方法,请参见设置实例参数。说明
关于 Lua 脚本使用的更多详情,请参见 Lua 脚本使用指南。
缓存数据库 Redis 版的实例类型不同,使用 Lua 脚本时的限制也不同。其中:
KEYS
数组来传递;redis.call/pcall
中调用的 Redis 命令,Key 的位置必须是 KEYS
数组。numkeys
的取值需大于等于 1。command arguments invalid
报错。若需要提高默认上限(最多可提升至 100,000),请提交工单联系技术支持。command arguments invalid
报错。若需要提高默认上限(最多可提升至 100,000),请提交工单联系技术支持。缓存数据库 Redis 版限制了部分命令不可在 Lua 脚本中使用。更多关于 Lua 脚本中支持使用的命令详情,请参见命令支持。
缓存数据库 Redis 版实例默认禁用 flushall
,flushdb
和 keys
命令。
说明
启用分片集群的 Redis 实例
nil
,该返回结果仅表示在当前分片上没有找到符合条件的 key,不代表在其它分片上没有符合条件的 key。因此建议在使用 RANDOMKEY 命令时,不要依据返回结果是否为nil
来判定是否存在符合条件的 key。不启用分片集群的 Redis 实例
不支持在 SORT 命令中使用 GET 或 BY 参数。