Cluter集群(直连模式)命令限制
Cluster集群实例支持多个Key的命令,但要求保持与开源Redis Cluster的行为一致,不支持跨SLOT访问REDIS命令。具体来说如下:
1.不支持多db,只能select 0。不支持select其他db.
2.要求单个命令操作的KEY都分布在同一个SLOT上。为了保证这个效果,建议可以使用hash tag等
3.支持事务和PUB/SUB订阅,但要求相关操作的KEY都在同一个SLOT上。
表1 Cluster集群实例受限使用的Redis命令:
命令类型 | 命令 |
SCRIPTING | SCRIPT |
EVAL | |
EVALSHA | |
GENERIC | SCAN |
DEL | |
UNLINK | |
DBSIZE | |
STRING | MSET |
MGET | |
SET | SUNION |
SUNIONSTORE | |
SDIFF | |
SDIFFSTORE | |
SINTER | |
SINTERSTORE | |
PUB/SUB | SUBSCRIBE |
PSUBSCRIBE | |
PUBLISH | |
UNSUBSCRIBE | |
PUNSUBSCRIBE | |
PUBSUB CHANNELS | |
PUBSUB NUMPA | |
PUBSUB NUMSU | |
STREAM | XGROU |
XINFO | |
XREAD | |
XREADGROUP |
代理模式集群命令限制
代理模式在集群模式的基础上,有如下的不同。
1.支持多DB,可以SELECT命令
2.支持MSET,MSET等跨SLOT的多个KEY命令支持。 具体参考下面的表1。
3.不支持CLUSTER KEYSLOT以外CLUSTER的命令
4.Client KILL和CLIENT LIST命令只能操作当前代理的客户端信息,不代表整个实例的。
5.代理模式下的事务、脚本执行都是按slot拆分发到对应节点执行的,同一个slot的事务不会被拆分,但不能保证跨SLOT事务一致性。
表2 代理模式集群支持多SLOT命令:
命令类型 | 命令 |
Strings | MSETNX |
Set | SINTER |
SINTERSTORE | |
SUNION | |
SUNIONSTORE | |
SDIFF | |
SDIFFSTORE | |
SMOVE | |
Sortedset | ZUNIONSTORE |
ZINTERSTORE | |
HyperLogLog | PFCOUNT |
PFMERGE | |
Keys | RENAME |
RENAMENX | |
BITOP | |
RPOPLPUSH |