由于部署架构的不同,相对标准架构来说,集群架构的实例在原生Redis命令的支持上有一定的区别,本文介绍集群架构实例的命令使用限制。
支持的命令
- 集群架构的Redis社区版实例:详情请参见Redis社区版命令支持。
- 集群架构的Redis企业版实例:Redis企业版拥有多个形态,不同形态的产品对命令的支持有所区别,详情请参见Redis企业版命令限制。
不支持的命令
- 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 |
Lua脚本使用限制
使用Lua脚本可高效地处理CAS(check-and-set)命令,进一步提升Redis的性能。通过组合使用多个命令,轻松实现以前很难实现或者不能高效实现的模式。为保障脚本中的所有操作都在相同slot(槽)进行,云数据库Redis会对Lua脚本做如下限制:
说明 如果发现无法执行Eval的相关命令,例如提示
ERR command eval not support for normal user
,请将实例的小版本升级至最新。具体操作,请参见升级小版本。
- 所有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必须在一个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
- 不支持发布订阅命令,包括PSUBSCRIBE、PUBSUB、PUBLISH、PUNSUBSCRIBE、SUBSCRIBE和UNSUBSCRIBE。
- 不支持UNPACK函数。
说明 如果您能够在代码中确保所有操作都在相同slot,且希望打破Redis集群的Lua限制,可以在控制台将script_check_enable修改为0,则后端不会对脚本进行校验,但仍需要使用KEYS数组至少传递一个key,供代理节点执行路由转发。具体操作,请参见参数设置及说明。
其他限制
- 执行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
。 - 如果事务开始前没有使用WATCH命令,且事务中都是单key命令的场景,Redis不再要求所有key必须在同1个slot(槽)中,使用方式和直连Redis完全一致。其他场景下要求事务中所有命令的所有key必须在同1个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。
在文档使用中是否遇到以下问题
更多建议
匿名提交