由于部署架构的不同,相对标准架构来说,集群架构的实例在原生Redis命令的支持上有一定的区别,本文介绍集群架构实例的命令使用限制。
支持的命令
集群架构的Tair实例拥有多个形态,不同形态的产品对命令的支持有所区别,详情请参见Tair命令支持与限制。
不支持的命令
- SWAPDB
- CLIENT ID
- SORT(BY和GET参数)
受限的命令
说明 如需在集群架构实例中执行下述受限制的命令,请使用hash tag确保命令所要操作的key都分布在1个hash slot中,hash tag的详细用法请参见Redis官方文档。
命令族 | 具体命令 |
---|---|
HyperLogLog | PFMERGE、PFCOUNT |
Keys | RENAME、RENAMENX、SORT |
Lists | RPOPLPUSH、BRPOP、BLPOP、BRPOPLPUSH |
Scripting | EVAL、EVALSHA、SCRIPT EXISTS、SCRIPT FLUSH、SCRIPT KILL、SCRIPT LOAD |
Strings | MSETNX |
Transaction | DISCARD、EXEC、MULTI、UNWATCH、WATCH |
SELECT命令的限制
连接模式 | 说明 |
---|---|
代理模式 | 支持,需要注意的是某些开源Redis客户端(例如stackExchange.redis)由于其误判导致无法正常执行SELECT命令,您可以先将cluster_compat_enable参数设置为0(即关闭原生Redis Cluster语法兼容),然后重启客户端应用后再进行尝试。具体操作,请参见设置实例参数。您也可以更其他支持该命令的客户端,例如Jedis客户端。 |
直连地址 | 不支持,主流客户端(例如Jedis客户端)的自身限制导致。 |
集群架构中Lua脚本的限制
Redis Cluster对使用Lua脚本增加了一些限制,Tair集群版在此基础上存在额外限制,更多信息请参见集群中Lua脚本的限制。
其他限制
- 执行CLIENT LIST命令会列出所有连接到该代理节点的连接信息。返回结果解释如下:
id
、age
、idle
、addr
、fd
、name
、db
、multi
、omem
、cmd
字段和原生Redis的含义一致。sub
、psub
在代理节点上没有区分,统一为1或0。qbuf
、qbuf-free
、obl
和oll
字段目前没有具体意义。
- CLIENT KILL命令目前支持的形式为:
client kill ip:port
和client kill addr ip:port
。 - 对于集群架构实例,在代理模式下,为了兼容主从架构,事务会被拆分成多个子事务执行,此时无法保证事务的原子性;在直连地址下,与开源Redis Cluster行为一致,即严格要求事务所操作的key均在同一slot。 重要 在代理模式下,当使用WATCH或事务内有多key命令(如MSET)时,事务不会被拆分,严格要求事务所操作的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。