首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在使用Laravel集群时会有异常?

为什么我在使用Laravel集群时会有异常?
EN

Stack Overflow用户
提问于 2019-10-31 10:26:07
回答 2查看 1.2K关注 0票数 2

我正在尝试配置我的Laravel配置以接受多个redis节点,但我得到了一个例外:

代码语言:javascript
复制
exception: "Predis\Response\ServerException"
file: "/home/vagrant/code/gryphon-laravel/vendor/predis/predis/src/Client.php"
line: 370
message: "MOVED 9576 10.225.25.33:6380"

生成异常的代码:

$user = Redis::get('anything');

.env

代码语言:javascript
复制
REDIS_CLUSTER=redis
REDIS_CLIENT=predis
CACHE_DRIVER=redis
QUEUE_DRIVER=redis
BROADCAST_DRIVER=redis

Config: database.php

代码语言:javascript
复制
[...]
'redis' => [
        'cluster' => true,
        'client' => env('REDIS_CLIENT', 'predis'),
        'clusters' => [
            'first' => [
                [
                    'host' => env('REDIS_HOST', 'localhost'),
                    'port' => env('REDIS_PORT', 6379),
                    'database' => 0,
                ]
            ],
            'second'=> [
                [
                    'host' => env('REDIS_HOST_2', 'localhost'),
                    'port' => env('REDIS_PORT_2', 6379),
                    'database' => 0,
                ]
            ],
            'third'=> [
                [
                    'host' => env('REDIS_HOST_3', 'localhost'),
                    'port' => env('REDIS_PORT_3', 6379),
                    'database' => 0,
                ],
            ]
        ],
        'options' => [
            'cluster' => env('REDIS_CLUSTER', 'predis'),
            'prefix' => Str::slug(env('APP_NAME', 'laravel'), '_').'_database_',
            'parameters' => [
                'password' => env('REDIS_PASSWORD', null),
            ],
        ],
        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],
        'cache' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_CACHE_DB', 1),
        ]
    ],
[...]

我搜了又搜,却什么也没找到.

这边的文档有点模糊:

如果应用程序正在使用Redis服务器集群,则应在Redis配置的群集键中定义这些群集: 'redis‘=> [’=> env‘(’REDIS_CLIENT‘,'phpredis'),’=>‘默认’=> [‘主机’=> env(‘REDIS_ =>’,'localhost'),‘=> env’(‘REDIS_密码’,null),‘端口’=> env('REDIS_PORT',6379),‘数据库’=> 0,], ],

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-31 11:01:52

Predis已经被软件包的原始作者所抛弃,并可能在以后的版本中从Laravel中删除。

因此,我建议安装php-ext phpredis。

.env:

代码语言:javascript
复制
REDIS_CLIENT=phpredis
票数 1
EN

Stack Overflow用户

发布于 2019-10-31 10:44:28

文件config/database.php

代码语言:javascript
复制
$redisConnStr = env('REDIS_CONNECTION', '127.0.0.1:6379');

$redis = [
    'client' => 'predis',
];

$redisConnections = explode(',', $redisConnStr);
if (count($redisConnections) === 1) {

    $params = explode(':', $redisConnections[0]);

    $redis = array_merge(
        $redis,
        [
            'cluster' => env('REDIS_CLUSTER', false),

            'default' => [
                'host'     => $params[0] ?? '127.0.0.1',
                'password' => env('REDIS_PASSWORD', null),
                'port'     => (int)($params[1] ?? 6379),
                'database' => env('REDIS_DATABASE', 0),
            ]
        ]
    );
}
else {
    $redisCacheCluster = [];

    foreach ($redisConnections as $conn){
        $params = explode(':', $conn);
        $redisCacheCluster[] = [
            'host'     => $params[0] ?? '127.0.0.1',
            'password' => env('REDIS_PASSWORD', null),
            'port'     => (int)($params[1] ?? 6379),
        ];
    }

    $redis             = array_merge(
        $redis,
        [
            'options'  => ['cluster' => 'redis'],
            'clusters' => [
                'default' => $redisCacheCluster,
            ]
        ]
    );
}

'redis' => $redis,

文件config/cache.php

代码语言:javascript
复制
'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

文件.env

代码语言:javascript
复制
REDIS_CONNECTION=127.0.0.1:6379, //all ips redis clusters
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58641301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档