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命令:
命令类型 命令 Strings MSETNX
Set
SINTER SINTERSTORE SUNION SUNIONSTORE SDIFF SDIFFSTORE SMOVE Sortedset ZUNIONSTORE ZINTERSTORE HyperLogLog PFCOUNT PFMERGE Keys RENAME RENAMENX BITOP RPOPLPUSH
经典版集群命令限制
经典版集群模有如下的不同。
1.支持多DB,可以SELECT命令。
2.支持MSET,MSET等跨SLOT的多个KEY命令支持。 具体参考下面的表2。
3.不支持CLUSTER KEYSLOT以外CLUSTER的命令。
4.Client KILL和CLIENT LIST命令只能操作当前代理的客户端信息,不代表整个实例的。
5.代理模式下的事务、脚本执行都是按slot拆分发到对应节点执行的,同一个slot的事务不会被拆分,但不能保证跨SLOT事务一致性。
表2 代理模式集群支持多SLOT命令:
命令类型 命令 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
Proxy集群命令限制
1.不支持多db,只能select 0。不支持select其他db.
2.支持事务和PUB/SUB订阅,但要求相关操作的KEY都在同一个SLOT上。
3.PUB/SUB订阅不支持redis内部事件的订阅。不支持keyspace事件的订阅
以下内容为便于浏览和内容表达,本文的表格约定使用下述注释:
- ⭕️表示Proxy支持该命令,但存在限制,请确保命令所要操作的Key都分布在1个Slot中,例如使用Hash tag等。
- ❌表示Proxy不支持该命令。
- 数字标记①:为兼容某些客户端框架,该命令仅返回
OK
或空结果,不会真正执行。 - 数字标记②:该请求由Proxy直接处理返回,不受Redis DB版本限制。
类型 命令
Proxy集群
Bitmap
BITOP
⭕️
Cluster management
CLUSTER ADDSLOTS
① CLUSTER ADDSLOTSRANGE
❌ CLUSTER BUMPEPOCH
❌ CLUSTER COUNT-FAILURE-REPORTS
② CLUSTER COUNTKEYSINSLOT
② CLUSTER DELSLOTS
① CLUSTER DELSLOTSRANGE
❌ CLUSTER FAILOVER
① CLUSTER FLUSHSLOTS
❌ CLUSTER FORGET
① CLUSTER GETKEYSINSLOT
① CLUSTER INFO
✔️ CLUSTER KEYSLOT
② CLUSTER LINKS
❌ CLUSTER MEET
① CLUSTER MYID
❌ CLUSTER NODES
② CLUSTER REPLICAS
❌ CLUSTER REPLICATE
① CLUSTER RESET
① CLUSTER SAVECONFIG
① CLUSTER SET-CONFIG-EPOCH
① CLUSTER SETSLOT
① CLUSTER SHARDS
❌ CLUSTER SLAVES
✔️ CLUSTER SLOTS
② READONLY
① READWRITE
①
Connection management
CLIENT CACHING
❌ CLIENT GETNAME
② CLIENT GETREDIR
② CLIENT ID
❌ CLIENT INFO
② CLIENT KILL
② CLIENT LIST
② CLIENT NO-EVICT
❌ CLIENT PAUSE
❌ CLIENT REPLY
❌ CLIENT SETNAME
② CLIENT TRACKING
❌ CLIENT TRACKINGINFO
② CLIENT UNBLOCK
❌ CLIENT UNPAUSE
❌ ECHO
② HELLO
❌ PING
① QUIT
② RESET
① SELECT
❌ Generic
COPY
⭕️ MIGRATE
❌ MOVE
❌ RENAME
⭕️ RENAMENX
⭕️ SORT
⭕️ WAIT
❌ WAITOF ❌ Geospatial indices
GEORADIUS
⭕️ GEORADIUSBYMEMBER
⭕️ GEOSEARCHSTORE
⭕️ HyperLogLog
PFCOUNT
⭕️ PFDEBUG ❌ PFMERGE
⭕️ PFSELFTEST ❌ Lists
BLPOP
⭕️ BLMOVE
⭕️ BLMPOP
⭕️ BRPOP
⭕️ BRPOPLPUSH
⭕️ LMOVE
⭕️ LMPOP
⭕️ RPOPLPUSH
⭕️ Pub/Sub
PUBSUB HELP
❌ SSUBSCRIBE
⭕️ SUNSUBSCRIBE
⭕️ Scripting and Functions
EVAL
⭕️ EVAL_RO
⭕️ EVALSHA
⭕️ EVALSHA_RO
⭕️ FCALL
⭕️ FCALL_RO
⭕️ SCRIPT DEBUG
❌ Server management
ACL CAT
❌ ACL DELUSER
❌ ACL DRYRUN
❌ ACL GENPASS
❌ ACL GETUSER
❌ ACL HELP
❌ ACL LIST
❌ ACL LOAD
❌ ACL LOG
❌ ACL SAVE
❌ ACL SETUSER
❌ ACL USERS
❌ ACL WHOAMI
❌ BGREWRITEAOF
❌ BGSAVE
❌ CONFIG HELP
❌ CONFIG RESETSTAT
❌ CONFIG REWRITE
❌ CONFIG SET
❌ DEBUG OBJECT
❌ DEBUG SEGFAULT
❌ FAILOVER
❌ LASTSAVE
❌ LATENCY DOCTOR
❌ LATENCY GRAPH
❌ LATENCY HELP
❌ LATENCY HISTOGRAM
❌ LATENCY HISTORY
❌ LATENCY LATEST
❌ LATENCY RESET
❌ MEMORY DOCTOR
❌ MEMORY HELP
❌ MEMORY MALLOC-STATS
❌ MEMORY PURGE
❌ MEMORY STATS
❌ MEMORY USAGE
❌ MODULE LIST
❌ MODULE LOAD
❌ MODULE LOADEX
❌ MODULE UNLOAD
❌ MONITOR
❌ PSYNC
❌ REPLICAOF
❌ ROLE
② SAVE
❌ SHUTDOWN
❌ SLAVEOF
❌ SWAPDB
❌ SYNC
❌ Sentinel
SENTINEL sentinels ②
❌ SENTINEL get-master-addr-by-name ②
❌ Sorted Set
BZMPOP
⭕️ BZPOPMAX
⭕️ BZPOPMIN
⭕️ ZDIFF
⭕️ ZDIFFSTORE
⭕️ ZINTER
⭕️ ZINTERSTORE
⭕️ ZMPOP
⭕️ ZRANGESTORE
⭕️ ZUNION
⭕️ ZUNIONSTORE
⭕️ Stream
XREAD
⭕️ XREADGROUP
⭕️ XSETID ❌ String
LCS ⭕️ MSETNX
⭕️ Transactions
WATCH
⭕️
读写分离命令限制
以下内容为便于浏览和内容表达,本文的表格约定使用下述注释:
- ❌表示Proxy不支持该命令。
- 数字标记①:为兼容某些客户端框架,该命令仅返回
OK
或空结果,不会真正执行。 - 数字标记②:该请求由Proxy直接处理返回,不受Redis DB版本限制。
类型 命令
读写分离
Connection management
CLIENT CACHING
❌ CLIENT GETNAME
② CLIENT GETREDIR
② CLIENT ID
❌ CLIENT INFO
② CLIENT KILL
② CLIENT LIST
② CLIENT NO-EVICT
❌ CLIENT PAUSE
❌ CLIENT REPLY
❌ CLIENT SETNAME
② CLIENT TRACKING
❌ CLIENT TRACKINGINFO
② CLIENT UNBLOCK
❌ CLIENT UNPAUSE
❌ ECHO
② HELLO
❌ PING
① QUIT
② RESET
① SELECT
❌ Generic
MIGRATE
❌ WAIT
❌ WAITOF ❌ HyperLogLog PFDEBUG ❌ PFSELFTEST ❌ Pub/Sub
PUBSUB HELP
❌ Scripting and Functions
SCRIPT DEBUG
❌ Server management
ACL CAT
❌ ACL DELUSER
❌ ACL DRYRUN
❌ ACL GENPASS
❌ ACL GETUSER
❌ ACL HELP
❌ ACL LIST
❌ ACL LOAD
❌ ACL LOG
❌ ACL SAVE
❌ ACL SETUSER
❌ ACL USERS
❌ ACL WHOAMI
❌ BGREWRITEAOF
❌ BGSAVE
❌ CONFIG HELP
❌ CONFIG RESETSTAT
❌ CONFIG REWRITE
❌ CONFIG SET
❌ DEBUG OBJECT
❌ DEBUG SEGFAULT
❌ FAILOVER
❌ LASTSAVE
❌ LATENCY DOCTOR
❌ LATENCY GRAPH
❌ LATENCY HELP
❌ LATENCY HISTOGRAM
❌ LATENCY HISTORY
❌ LATENCY LATEST
❌ LATENCY RESET
❌ MEMORY DOCTOR
❌ MEMORY HELP
❌ MEMORY MALLOC-STATS
❌ MEMORY PURGE
❌ MEMORY STATS
❌ MEMORY USAGE
❌ MODULE LIST
❌ MODULE LOAD
❌ MODULE LOADEX
❌ MODULE UNLOAD
❌ MONITOR
❌ PSYNC
❌ REPLICAOF
❌ ROLE
② SAVE
❌ SHUTDOWN
❌ SLAVEOF
❌ SWAPDB
❌ SYNC
❌ Sentinel
SENTINEL sentinels ②
❌ SENTINEL get-master-addr-by-name ②
❌ Stream XSETID ❌