All Products
Search
Document Center

Tair (Redis® OSS-Compatible):Command limitations for cluster and read/write splitting instances

Last Updated:Mar 28, 2026

Tair (Redis OSS-compatible) instances running cluster architecture or read/write splitting architecture have a different set of command restrictions compared to standard architecture instances. Some commands are disabled, and multi-key commands cannot access keys across different slots. Review these limitations before migrating workloads or writing application code.

Command limitations for cluster architecture

Cluster instances are compatible with multiple Redis versions. For command support by version, see Redis Open-Source Edition command support and Tair (Enterprise Edition) command support and limitations.

Cluster architecture supports two connection modes: direct connection mode and proxy mode. The limitations differ between the two.

Direct connection mode

  • SELECT: Supported, but only for cluster initialization. If your client does not support SELECT during cluster initialization, this command is unavailable.

  • SWAPDB: Supported only on instances compatible with Redis 7.0.

  • Multi-key commands: All keys must be in the same slot. Use hash tags to group keys into the same slot.

  • Transactions: All keys in a transaction must be in the same slot, consistent with open-source Redis Cluster behavior.

Proxy mode

Proxy mode adds a middle layer that hides the cluster topology, which improves client compatibility. It inherits all direct connection mode limitations and adds the following:

  • CLIENT INFO and CLIENT ID are not supported.

  • CLIENT KILL supports two formats: CLIENT KILL <ip:port> and CLIENT KILL ADDR <ip:port>.

  • DEL and EXISTS support cross-slot multi-key operations.

  • SCAN 0 starts from the first data shard and traverses each shard sequentially, moving to the next shard only after the current shard is fully scanned. To scan a specific shard, use the ISCAN command.

  • Cluster instances in proxy mode support Alibaba Cloud self-developed proxy commands for management and operations. See Alibaba Cloud self-developed proxy commands.

CLIENT LIST output differences

When you run CLIENT LIST, the proxy returns connection information for all connections to the proxy node. The output differs from native Redis as follows:

FieldBehavior
id, age, idle, addr, fd, name, db, multi, omem, cmdSame meaning as native Redis
sub, psubNot differentiated on the proxy node; both are set to 1 or 0
qbuf, qbuf-free, obl, ollNo specific meaning

Transaction behavior in proxy mode

Transaction behavior depends on the slot distribution of the keys involved:

ScenarioResult
All keys in the same slotTransaction runs normally; full transaction semantics apply
Keys in different slots, but each individual command's keys in the same slotTransaction runs normally; semantics are guaranteed per command but not across commands with keys in different slots
A single command with keys in different slotsThe command cannot be executed
Keyless commandsSome are not supported inside transactions; see the command support tables below

In addition, Redis Cluster has some limitations on using Lua scripts. Tair (Redis OSS-compatible) cluster architecture has additional limitations. For more information, see Special limitations for cluster architecture.

Command limitations for read/write splitting instances

Read/write splitting instances are compatible with multiple Redis versions. For command support by version, see Redis Open-Source Edition command support and Tair (Enterprise Edition) command support and limitations.

Read/write splitting instances use proxy mode by default, so they have the same command restrictions as cluster instances in proxy mode. For example, CLIENT INFO and CLIENT ID are not supported.

Read/write splitting instances also support Alibaba Cloud self-developed proxy commands for management and operations. See Alibaba Cloud self-developed proxy commands.

Command support table for proxy mode

The following tables apply to both cluster architecture in proxy mode and read/write splitting architecture.

Legend:

SymbolMeaning
✔️Supported. For multi-key commands, cross-slot operations are allowed.
⭕️Supported with limitations. All keys must be in the same slot (use hash tags).
Not supported.
Note ①Returns OK or an empty result only; not actually executed. Included for compatibility with some client frameworks.
Note ②Processed and returned directly by the proxy, regardless of the Redis version.

Bitmap

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
BITCOUNT✔️✔️✔️✔️
BITFIELD✔️✔️✔️✔️
BITFIELD_RO
BITOP⭕️⭕️✔️✔️
BITPOS✔️✔️✔️✔️
GETBIT✔️✔️✔️✔️
SETBIT✔️✔️✔️✔️

Cluster management

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
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

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
AUTH✔️✔️✔️
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✔️ (with limitations)✔️ (with limitations)✔️ (with limitations)✔️ (with limitations)
PING ②✔️✔️✔️
QUIT ②✔️✔️✔️✔️
RESET
SELECT✔️✔️✔️✔️
HELLO is disabled by default. To enable it, upgrade the proxy minor version to 7.0.9 or later and enable the hello_enabled parameter.

Generic

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
COPY⭕️⭕️✔️✔️
DEL✔️⭕️✔️✔️
DUMP✔️✔️✔️✔️
EXISTS✔️⭕️✔️✔️
EXPIRE✔️✔️✔️✔️
EXPIREAT✔️✔️✔️✔️
EXPIRETIME✔️✔️✔️✔️
KEYS✔️✔️✔️
MIGRATE
MOVE✔️✔️✔️✔️
OBJECT✔️✔️✔️✔️
OBJECT HELP✔️✔️✔️✔️
PERSIST✔️✔️✔️✔️
PEXPIRE✔️✔️✔️✔️
PEXPIREAT✔️✔️✔️✔️
PEXPIRETIME✔️✔️✔️✔️
PTTL✔️✔️✔️✔️
RANDOMKEY✔️✔️✔️
RENAME⭕️⭕️✔️✔️
RENAMENX⭕️⭕️✔️✔️
RESTORE✔️✔️✔️✔️
SCAN✔️✔️✔️
SORT⭕️⭕️✔️✔️
SORT_RO⭕️⭕️✔️✔️
TOUCH✔️⭕️✔️✔️
TTL✔️✔️✔️✔️
TYPE✔️✔️✔️✔️
UNLINK✔️⭕️✔️✔️
WAIT✔️✔️✔️

Geospatial indices

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
GEOADD✔️✔️✔️✔️
GEODIST✔️✔️✔️✔️
GEOHASH✔️✔️✔️✔️
GEOPOS✔️✔️✔️✔️
GEORADIUS⭕️⭕️✔️✔️
GEORADIUSBYMEMBER⭕️⭕️✔️✔️
GEOSEARCH✔️✔️✔️✔️
GEOSEARCHSTORE⭕️⭕️✔️✔️

Hash

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
HDEL✔️✔️✔️✔️
HEXISTS✔️✔️✔️✔️
HGET✔️✔️✔️✔️
HGETALL✔️✔️✔️✔️
HINCRBY✔️✔️✔️✔️
HINCRBYFLOAT✔️✔️✔️✔️
HKEYS✔️✔️✔️✔️
HLEN✔️✔️✔️✔️
HMGET✔️✔️✔️✔️
HMSET✔️✔️✔️✔️
HRANDFIELD✔️✔️✔️✔️
HSCAN✔️✔️✔️✔️
HSET✔️✔️✔️✔️
HSETNX✔️✔️✔️✔️
HSTRLEN✔️✔️✔️✔️
HVALS✔️✔️✔️✔️

HyperLogLog

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
PFADD✔️✔️✔️✔️
PFCOUNT⭕️⭕️✔️✔️
PFMERGE⭕️⭕️✔️✔️

Lists

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
BLPOP⭕️⭕️✔️✔️
BLMOVE⭕️⭕️✔️✔️
BLMPOP⭕️⭕️✔️✔️
BRPOP⭕️⭕️✔️✔️
BRPOPLPUSH⭕️⭕️✔️✔️
LINDEX✔️✔️✔️✔️
LINSERT✔️✔️✔️✔️
LLEN✔️✔️✔️✔️
LMOVE⭕️⭕️✔️✔️
LMPOP⭕️⭕️✔️✔️
LPOP✔️✔️✔️✔️
LPUSH✔️✔️✔️✔️
LPUSHX✔️✔️✔️✔️
LRANGE✔️✔️✔️✔️
LREM✔️✔️✔️✔️
LSET✔️✔️✔️✔️
LTRIM✔️✔️✔️✔️
RPOP✔️✔️✔️✔️
RPOPLPUSH⭕️⭕️✔️✔️
RPUSH✔️✔️✔️✔️
RPUSHX✔️✔️✔️✔️

Pub/Sub

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
PSUBSCRIBE✔️✔️
PUBLISH✔️✔️✔️✔️
PUBSUB✔️✔️✔️
PUBSUB HELP
PUBSUB SHARDCHANNELS✔️✔️✔️
PUBSUB SHARDNUMSUB✔️✔️✔️
PUNSUBSCRIBE✔️✔️
SPUBLISH✔️✔️✔️✔️
SUBSCRIBE✔️✔️
SSUBSCRIBE✔️✔️
SUNSUBSCRIBE✔️✔️
UNSUBSCRIBE✔️✔️

Scripting and functions

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
EVAL⭕️✔️✔️
EVAL_RO⭕️✔️✔️
EVALSHA⭕️✔️✔️
EVALSHA_RO⭕️✔️✔️
FCALL⭕️✔️✔️
FCALL_RO⭕️✔️✔️
FUNCTION DELETE✔️✔️
FUNCTION DUMP✔️✔️
FUNCTION FLUSH✔️✔️
FUNCTION HELP✔️✔️
FUNCTION KILL✔️✔️
FUNCTION LIST✔️✔️
FUNCTION LOAD✔️✔️
FUNCTION RESTORE✔️✔️
FUNCTION STATS✔️✔️
SCRIPT DEBUG
SCRIPT EXISTS✔️✔️
SCRIPT FLUSH✔️✔️
SCRIPT KILL✔️✔️
SCRIPT LOAD✔️✔️

Server management

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
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
COMMAND✔️✔️✔️
COMMAND COUNT✔️✔️✔️
COMMAND DOCS✔️✔️✔️
COMMAND GETKEYS✔️✔️✔️
COMMAND GETKEYSANDFLAGS✔️✔️✔️
COMMAND INFO✔️✔️✔️
COMMAND LIST✔️✔️✔️
CONFIG GET✔️✔️✔️
CONFIG HELP
CONFIG RESETSTAT
CONFIG REWRITE
CONFIG SET ①②✔️✔️✔️
DBSIZE✔️✔️✔️
DEBUG OBJECT
DEBUG SEGFAULT
FAILOVER
FLUSHALL✔️✔️✔️
FLUSHDB✔️✔️✔️
INFO✔️✔️✔️
LASTSAVE
LATENCY DOCTOR
LATENCY GRAPH
LATENCY HELP
LATENCY HISTOGRAM
LATENCY HISTORY
LATENCY LATEST
LATENCY RESET
LOLWUT✔️✔️✔️
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
SLOWLOG✔️✔️✔️
SLOWLOG HELP✔️✔️✔️
SLOWLOG RESET✔️✔️✔️
SWAPDB✔️✔️✔️
SYNC
TIME✔️✔️✔️

Sentinel

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
SENTINEL sentinels ②✔️✔️
SENTINEL get-master-addr-by-name ②✔️✔️

Set

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
SADD✔️✔️✔️✔️
SCARD✔️✔️✔️✔️
SDIFF✔️⭕️✔️✔️
SDIFFSTORE✔️⭕️✔️✔️
SINTER✔️⭕️✔️✔️
SINTERCARD✔️⭕️✔️✔️
SINTERSTORE✔️⭕️✔️✔️
SISMEMBER✔️✔️✔️✔️
SMEMBERS✔️✔️✔️✔️
SMISMEMBER✔️✔️✔️✔️
SMOVE✔️⭕️✔️✔️
SPOP✔️✔️✔️✔️
SRANDMEMBER✔️✔️✔️✔️
SREM✔️✔️✔️✔️
SSCAN✔️✔️✔️✔️
SUNION✔️⭕️✔️✔️
SUNIONSTORE✔️⭕️✔️✔️

Sorted set

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
BZMPOP⭕️⭕️✔️✔️
BZPOPMAX⭕️⭕️✔️✔️
BZPOPMIN⭕️⭕️✔️✔️
ZADD✔️✔️✔️✔️
ZCARD✔️✔️✔️✔️
ZCOUNT✔️✔️✔️✔️
ZDIFF✔️⭕️✔️✔️
ZDIFFSTORE✔️⭕️✔️✔️
ZINCRBY✔️✔️✔️✔️
ZINTER✔️✔️✔️✔️
ZINTERCARD✔️⭕️✔️✔️
ZINTERSTORE✔️⭕️✔️✔️
ZLEXCOUNT✔️✔️✔️✔️
ZMPOP⭕️⭕️✔️✔️
ZMSCORE✔️✔️✔️✔️
ZPOPMAX✔️✔️✔️✔️
ZPOPMIN✔️✔️✔️✔️
ZRANDMEMBER✔️✔️✔️✔️
ZRANGE✔️✔️✔️✔️
ZRANGEBYLEX✔️✔️✔️✔️
ZRANGEBYSCORE✔️✔️✔️✔️
ZRANGESTORE⭕️⭕️✔️✔️
ZRANK✔️✔️✔️✔️
ZREM✔️✔️✔️✔️
ZREMRANGEBYLEX✔️✔️✔️✔️
ZREMRANGEBYRANK✔️✔️✔️✔️
ZREMRANGEBYSCORE✔️✔️✔️✔️
ZREVRANGE✔️✔️✔️✔️
ZREVRANGEBYLEX✔️✔️✔️✔️
ZREVRANGEBYSCORE✔️✔️✔️✔️
ZREVRANK✔️✔️✔️✔️
ZSCAN✔️✔️✔️✔️
ZSCORE✔️✔️✔️✔️
ZUNION✔️⭕️✔️✔️
ZUNIONSTORE✔️⭕️✔️✔️

Stream

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
XACK✔️✔️✔️✔️
XADD✔️✔️✔️✔️
XAUTOCLAIM✔️✔️✔️✔️
XCLAIM✔️✔️✔️✔️
XDEL✔️✔️✔️✔️
XGROUP✔️✔️✔️✔️
XGROUP CREATECONSUMER✔️✔️✔️✔️
XINFO✔️✔️✔️✔️
XLEN✔️✔️✔️✔️
XPENDING✔️✔️✔️✔️
XRANGE✔️✔️✔️✔️
XREAD⭕️⭕️✔️✔️
XREADGROUP⭕️⭕️✔️✔️
XREVRANGE✔️✔️✔️✔️
XTRIM✔️✔️✔️✔️

String

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
APPEND✔️✔️✔️✔️
DECR✔️✔️✔️✔️
DECRBY✔️✔️✔️✔️
GET✔️✔️✔️✔️
GETDEL✔️✔️✔️✔️
GETEX✔️✔️✔️✔️
GETRANGE✔️✔️✔️✔️
GETSET✔️✔️✔️✔️
LCS✔️⭕️✔️✔️
INCR✔️✔️✔️✔️
INCRBY✔️✔️✔️✔️
INCRBYFLOAT✔️✔️✔️✔️
MGET✔️⭕️✔️✔️
MSET✔️⭕️✔️✔️
MSETNX⭕️⭕️✔️✔️
PSETEX✔️✔️✔️✔️
SET✔️✔️✔️✔️
SETEX✔️✔️✔️✔️
SETNX✔️✔️✔️✔️
SETRANGE✔️✔️✔️✔️
STRALGO
STRLEN✔️✔️✔️✔️

Transactions

CommandCluster architectureAllowed in cluster architecture transactionsRead/write splitting architectureAllowed in read/write splitting architecture transactions
DISCARD✔️✔️✔️✔️
EXEC✔️✔️✔️✔️
MULTI✔️✔️
UNWATCH✔️✔️✔️
WATCH⭕️✔️

FAQ

Do cluster architecture and read/write splitting architecture instances in proxy mode support the WAIT command?

Yes. WAIT is supported in proxy versions 7.1.5 and later. If you're on an earlier version, upgrade the proxy version.