Redis:错误“auth”命令的参数个数错误

xvw2m8pv  于 2022-12-17  发布在  Redis
关注(0)|答案(1)|浏览(369)

我正在使用redis和nodejs。版本:"redis": "^3.1.2"
当我的服务器连接到redis时,我得到以下错误:

ERR wrong number of arguments for 'auth' command

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

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

我的Redis是由Heroku托管的,我无法更改URL。我不知道如何才能使它工作。任何想法/解决方案非常感谢。

x4shl7ld

x4shl7ld1#

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中删除用户名。注意:-<password>前面的“:“
这应该可以解决您所面临的问题。
对于其他版本:
Redis版本〈6.0.0且node-redis〈=3.0.2时,redis://h:<password>@<url>:<port>可以正常工作。
Redis Version〉= 6.0.0和node-redis(任何版本),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就会被设置,其值为Connection URL,格式为:redis://h:<password>@<url>:<port>。此“h”是假的/虚拟的/占位符用户名,因为某些客户端(例如:node-redis)无法正确处理URL中的空用户名。在Redis 6中发布ACL后,客户端开始支持使用2个参数(用户名和密码)的新AUTH命令。在Redis版本4和5中,试图将h用户名传递给AUTH的客户端将导致上述错误。Reference

相关问题