集群实例的命令限制
由于部署架构的不同,云数据库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相关命令,无上述限制。 - 所有key都应该由KEYS数组来传递,redis.call/pcall中调用的redis命令,key的位置必须是KEYS array(不能使用Lua变量替换KEYS),否则直接返回错误信息,"
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。
评论