Redis:错误 'auth' 命令的参数数量错误

Redis: ERR wrong number of arguments for 'auth' command

我正在使用 redis 和 nodejs。版本:"redis": "^3.1.2"

当我的服务器连接到 redis 时,出现以下错误:

ERR wrong number of arguments for 'auth' command

我猜它与 URL 有关,它看起来像这样:

redis://h:<password>@<url>:<port>

我的 redis 由 Heroku 托管,我无法更改 URL。并且不知道我怎样才能让它发挥作用。任何 ideas/solutions 非常感谢。

Redis 版本 < 6.0.0 和 node-redis >=3.1.0 ,redis://h:<password>@<url>:<port> 将不起作用并抛出 ERR wrong number of arguments for 'auth' command.

解决方案:redis://<password>@<url>:<port> 有效,即:从 URL.

中删除用户名

这应该可以解决您面临的问题。

其他版本:

Redis 版本 < 6.0.0 且 node-redis <=3.0.2,redis://h:<password>@<url>:<port> 有效。

Redis Version >= 6.0.0 and node-redis(any version), redis://<username>:<password>@<url>:<port>(当redis ACL中的用户名设置为自定义用户名时)和redis://<password>@<url>:<port>都可以。

原因是:

  • node-redis 根据 releasenote.

    进行了更改以支持 Redis-6
  • Redis-6 支持 ALC 中的用户名。在 v6 之前,Redis 没有用户的概念,唯一的认证策略是单一的登录密码。 Reference

  • 每当您将 Redis 插件附加到 Heroku 容器时,都会设置环境变量 REDIS_URL 并且值为连接 URL 格式:redis://h:<password>@<url>:<port>。这个“h”是一个 fake/dummy/placeholder 用户名,因为某些客户端(例如:node-redis)无法正确处理 URL 中的空白用户名。在 Redis 6 中发布 ACL 后,客户端开始支持使用 2 个参数(用户名和密码)的新 AUTH 命令。尝试将 h 用户名传递给 AUTH 的客户端将导致 Redis 版本 4 和 5 出现上述错误。Reference