部分命令使用限制
本章节主要介绍部分Redis命令使用时的限制。
Key相关命令使用限制
使用KEYS命令时,若缓存数据量较大,可能会较长时间阻塞其它业务命令操作,甚至可能过高地占用额外内存。因此使用KEYS命令时请尽量描述精确的pattern、不要使用“keys *”进行全通配。keys *会遍历所有数据,持续占用CPU,影响客户业务稳定性。建议尽量避免在生产环境使用,否则会影响服务的健康运行。
Server相关命令使用限制
- 当用户执行比较耗时的命令(如flushall)时,可能会导致缓存实例在命令执行期间对外不响应用户的其它命令,造成状态监控失效,此时Console上缓存实例的状态会变成异常,命令执行结束后,实例状态会恢复正常。
- 使用FLUSHDB、FLUSHALL命令时,若缓存数据量较大,可能会较长时间阻塞其它业务命令操作。
- 不建议在业务高峰使用MONITOR命令,在高并发的场景下执行MONITOR命令可能会影响实例性能,增加时延。
EVAL和EVALSHA相关命令使用限制
- 使用EVAL和EVALSHA命令时,命令参数中必须带有至少1个key。否则客户端会提示“ERR eval/evalsha numkeys must be bigger than zero in redis cluster mode”的错误。
- 使用EVAL和EVALSHA命令时,DCS Redis集群实例使用第一个key来计算slot,用户代码需要保证操作的key是在同一个slot,具体请参考Redis命令。
- 使用EVAL命令时:
- 建议使用前先了解Redis的lua脚本特性,具体可参考Lua脚本。
- lua脚本的执行超时时间为5秒钟,建议不要在lua脚本中使用比较耗时的代码,比如长时间的sleep、大的循环等语句。
- 调用lua脚本时,建议不要使用随机函数去指定key,否则在主备节点上执行结果不一致,从而导致主备节点数据不一致。
Lua脚本调试命令
Proxy集群和读写分离实例在执行Lua脚本调试命令时,仅支持异步非阻塞--ldb模式,不支持同步阻塞--ldb-sync-mode。且每个Proxy节点默认限制并发2个。其他Redis实例类型无此限制。