由于部署架构的不同,云数据库Redis集群版相比标准版在原生Redis命令的支持上有一定的区别,本章节介绍云Redis集群版中的命令使用限制。

受限的命令

Keys Strings Lists HyperLogLog Transaction Scripting
RENAME MSETNX RPOPLPUSH PFMERGE DISCARD EVAL
RENAMENX BRPOP PFCOUNT EXEC EVALSHA
SORT BLPOP MULTI SCRIPT EXISTS
BRPOPLPUSH UNWATCH SCRIPT FLUSH
WATCH SCRIPT KILL
SCRIPT LOAD

不支持的命令

SWAPDB

限制说明

  • 如需在集群实例中执行受限制的命令,请使用hash tag确保命令所要操作的key都要分布在一个hash slot中,受限命令列表请参见受限的命令

    例如,有key1,aakey,abkey3三个key,在存储这些key时,需要用{key}1,aa{key},ab{key}3的方式使三者分布在同一个hash slot。hash tag的详细用法请参见Redis官方文档

  • 事务之前没有使用watch命令且事务中都是单key的命令场景,不再要求所有key必须在同一个slot中,使用方式和直连redis完全一致。其他场景要求事务中所有命令的所有key必须在同一个slot中。
    • 多key命令包括:DEL、SORT、MGET、MSET、BITOP、EXISTS、MSETNX、RENAME、 RENAMENX、BLPOP、BRPOP、RPOPLPUSH、BRPOPLPUSH、SMOVE、SUNION、SINTER、SDIFF、SUNIONSTORE、SINTERSTORE、SDIFFSTORE、ZUNIONSTORE、ZINTERSTORE、 PFMERGE、PFCOUNT。
    • 不允许在事务中使用的命令包括:WATCH、UNWATCH、RANDOMKEY、KEYS、SUBSCRIBE、 UNSUBSCRIBE、PSUBSCRIBE、PUNSUBSCRIBE、PUBLISH、PUBSUB、SCRIPT、EVAL、 EVALSHA、SCAN、ISCAN、DBSIZE、ADMINAUTH、AUTH、PING、ECHO、FLUSHDB、 FLUSHALL、MONITOR、IMONITOR、RIMONITOR、INFO、IINFO、RIINFO、CONFIG、 SLOWLOG、TIME、CLIENT。
  • 集群实例中的Lua使用限制如下:
    • 所有key都应该由KEYS数组来传递,redis.call/pcall中调用的redis命令,key的位置必须是KEYS array(不能使用Lua变量替换KEYS),否则直接返回错误信息,"-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS array\r\n"。
    • 所有key必须在1个slot上,否则返回错误信息,"-ERR eval/evalsha command keys must be in same slot\r\n"。
    • 调用必须要带有key,否则直接返回错误信息, "-ERR for redis cluster, eval/evalsha number of keys can't be negative or zero\r\n"。
    • 不支持发布订阅命令,包括:PSUBSCRIBE、PUBSUB、PUBLISH、PUNSUBSCRIBE、SUBSCRIBE、UNSUBSCRIBE。
    说明 云Redis标准版实例可直接调用Lua相关命令,无上述限制。