You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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>,因此触发参数数量错误。

解决步骤:

  1. 彻底移除配置中的username参数,只保留password
$client = new Predis\Client(
    [
        'scheme' => 'redis',
        'host'   => '127.0.0.1',
        'port'   => 6379,
        'password' => "Pass",
    ]
);
$client->set('foo', 'bar');
  1. 如果是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,
    ],
],
  1. 确认Redis配置文件中的requirepass项已正确设置为你使用的密码,重启Redis服务生效。

内容的提问来源于stack exchange,提问作者Oleg

火山引擎 最新活动