更新时间:2023-06-13 GMT+08:00

部分命令使用限制

本章节主要介绍部分Redis命令使用时的限制。

Key相关命令使用限制

使用KEYS命令时,若缓存数据量较大,可能会较长时间阻塞其它业务命令操作,甚至可能过高地占用额外内存。因此使用KEYS命令时请尽量描述精确的pattern、不要使用“keys *”进行全通配。建议尽量避免在生产环境使用,否则会影响服务的健康运行。

Server相关命令使用限制

  • 当用户执行比较耗时的命令(如flushall)时,可能会导致缓存实例在命令执行期间对外不响应用户的其它命令,造成状态监控失效,此时Console上缓存实例的状态会变成异常,命令执行结束后,实例状态会恢复正常。
  • 使用FLUSHDB、FLUSHALL命令时,若缓存数据量较大,可能会较长时间阻塞其它业务命令操作。

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实例类型无此限制。

其他限制

  • 单个Redis命令处理时长限制为15秒左右,超过15秒未处理完,会导致客户的其它业务失败,因此内部会触发主从倒换。
  • 2018年7月10日前创建的Redis集群实例需要升级才支持以下命令:

    SINTER、 SDIFF、SUNION、PFCOUNT、PFMERGE、SINTERSTORE、SUNIONSTORE、SDIFFSTORE、SMOVE、ZUNIONSTORE、ZINTERSTORE、EVAL、EVALSHA、BITOP、RENAME、RENAMENX、RPOPLPUSH、MSETNX、SCRIPT LOAD、SCRIPT KILL、SCRIPT EXISTS、SCRIPT FLUSH。