由于部署架构的不同,云数据库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

限制说明

  • 集群实例受限的Redis命令只支持所操作key均分布在单个hash slot中的场景,没有实现多个hash slot数据的合并功能,因此需要用hash tag的方式确保要操作的key均分布在一个hash slot中。

    例如有key1,aakey,abkey3,那么我们在存储的时候需要用{key}1,aa{key},ab{key}3的方式存储,这样调用受限命令时才能生效。具体关于hash tag的用法请参见Redis官方文档:http://redis.io/topics/cluster-spec

  • 事务之前没有使用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"。
    说明 云Redis标准版实例可直接调用Lua相关命令,无上述限制。