Laravel+Redis设置密码后无法连接,报AUTH命令参数错误
问题描述
环境:
- Redis 4.0.9
- Laravel 7.29
- Predis
Redis关闭认证模式时,以下代码可正常执行:
$client = new Predis\Client( [ 'scheme' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, ] ); $client->set('foo', 'bar');
但添加password参数后无法运行:
$client = new Predis\Client( [ 'scheme' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' =>"Pass", ] ); $client->set('foo', 'bar');
尝试添加username参数(设为空字符串、"h"或null)后,依然报错:
root@vds:/home/apps/znak# php artisan redis:go Predis\Connection\ConnectionException Failed: ERR wrong number of arguments for 'auth' command [tcp://127.0.0.1:6379] at vendor/predis/predis/src/Connection/AbstractConnection.php:157
解决方案
问题根源在于Redis 4.0.x不支持用户名认证,而Predis只要检测到配置了username(哪怕是null或空值),就会向Redis发送AUTH <username> <password>双参数命令,但Redis 4.0仅支持单参数的AUTH <password>,因此触发参数数量错误。
解决步骤:
- 彻底移除配置中的
username参数,只保留password:
$client = new Predis\Client( [ 'scheme' => 'redis', 'host' => '127.0.0.1', 'port' => 6379, 'password' => "Pass", ] ); $client->set('foo', 'bar');
- 如果是Laravel配置文件(
config/database.php)中配置Redis,同样确保只设置password,不要添加username字段:
'redis' => [ 'client' => 'predis', 'default' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], ],
- 确认Redis配置文件中的
requirepass项已正确设置为你使用的密码,重启Redis服务生效。
内容的提问来源于stack exchange,提问作者Oleg




