Predis with laravel 5.5 "Нет доступных подключений в пуле в Aggregate / RedisCluster.php: 337" - PullRequest
0 голосов
/ 07 декабря 2018

Я установил redis-cluster на эластичный кеш aws для кеша, используя Laravel 5.5 и пакет Predis, я получаю следующую ошибку:

Predis\ClientException: No connections available in the pool in vendor/predis/predis/src/Connection/Aggregate/RedisCluster.php:337 

Трассировка: Predis \ ClientException: Нет соединенийдоступно в пуле вендора / predis / predis / src / Connection / Aggregate / RedisCluster.php: 337

Трассировка стека:

0 вендор / predis / predis / src / Connection / Aggregate /RedisCluster.php (411): Predis \ Connection \ Aggregate \ RedisCluster-> guessNode (153)

1 поставщик / predis / predis / src / Connection / Aggregate / RedisCluster.php (388): Predis \ Connection \Aggregate \ RedisCluster-> getConnectionBySlot (153)

2 поставщик / predis / predis / src / Connection / Aggregate / RedisCluster.php (550): Predis \ Connection \ Aggregate \ RedisCluster-> getConnection (объект (Predis \)Command \ StringSetExpire))

3 поставщик / predis / predis / src / Connection / Aggregate / RedisCluster.php (593): Predis \ Connection \ Aggregate \ RedisCluster-> retryCommandOnFailure (Объект (Predis \ Command \ StringSetExp), 'executeCommand')

4 vendor / predis / predis / src / Client.php (331): Predis \ Connection \ Aggregate \ RedisCluster-> executeCommand (Object (Predis \ Command \ StringSetExpire))

5 vendor / predis / predis/src/Client.php(314): Predis \ Client-> executeCommand (Object (Predis \ Command \ StringSetExpire))

6 vendor / laravel / framework / src / Подсветка / Redis / Connections / Connection.php(96): Predis \ Client -> __ call ('setex', Array)

7 vendor / laravel / framework / src / Подсветка / Redis / Connections / Connection.php (108): Подсветка \ Redis \ ConnectionsКоманда \ Connection-> ('setex', Array)

8 vendor / laravel / framework / src / Подсветка / Cache / RedisStore.php (93): Подсветка \ Redis \ Connections \ Connection -> __ call ('setex ', Array)

9 вендор / laravel / framework / src / Подсветка / Cache / Repository.php (195): Подсветка \ Cache \ RedisStore-> put (' 5rr44TBjIPEgJSx ... ',' a:1: {s: 6: "_ flas ... ', 480)

10 vendor / laravel / framework / src / Illuminate / Session / CacheBasedSessionHandler.php (66): Подсветить \ Cache \ Repository-> put( '5rr44TBjIPEgJSx ... ',' a: 1: {s: 6: "_ flas ... ', 480)

11 vendor / laravel / framework / src / Illuminate / Session / Store.php (128): Подсветить \ Session \ CacheBasedSessionHandler-> write ('5rr44TBjIPEgJSx ...', 'a: 1: {s: 6: "_ flas ...')

12 vendor / laravel / framework / src / Illuminate/Session/Middleware/StartSession.php(87): Подсветка \ Session \ Store-> save ()

13 vendor / laravel / framework / src / Illuminate / Foundation / Http / Kernel.php (218):Подсветка \ Session \ Middleware \ StartSession-> terminate (Object (Подсветка \ Http \ Request), Объект (Подсветка \ Http \ Response))

14 вендор / laravel / framework / src / Подсветка / Foundation / Http /Kernel.php (189): Illuminate \ Foundation \ Http \ Kernel-> terminateMiddleware (Object (Illuminate \ Http \ Request), Object (Illuminate \ Http \ Response))

15 public / index.php (58): Подсветка \ Foundation \ Http \ Kernel-> terminate (Object (Подсветка \ Http \ Request), Объект (Подсветка \ Http \ Response))

16 {main}

Технический стек, который я использовал:

  • PHP7.0
  • Laravel5.5
  • OS (Debian GNU / Linux 9.6 (stretch)), выпуск 9.6

Я попробовал следующееконфиги в config / database.php:

redis=> [
'client'  => 'predis',
        'options' => [
            'cluster' => 'redis',
        ],
        'clusters' => [
            'default' => [
                [
                    'host' => env('REDIS_CLUSTER_HOST', 'localhost'),
                    'password' => env('REDIS_CLUSTER_PASSWORD', null),
                    'port' => env('REDIS_CLUSTER_PORT', 6379),
                    'database' => 0,
                ],
            ],
            'cache' => [
                [
                    'host' => env('REDIS_CLUSTER_HOST', 'localhost'),
                    'password' => env('REDIS_CLUSTER_PASSWORD', null),
                    'port' => env('REDIS_CLUSTER_PORT', 6379),
                    'database' => 0,
                ],
            ],
        ]
]

Я также пытался с таймаутом => 0 | 5 | 60, но каждый раз, когда я получаю ту же ошибку.

Любая помощь будет высоко ценится!

1 Ответ

0 голосов
/ 10 января 2019

Это работает в нашей среде:

    'redis' => [
         'cluster' => true,

         'client' => 'predis',

         'options' => [
             'cluster' => 'redis',
             'parameters' => [
                 'scheme'   => env('REDIS_SCHEME', 'tcp'),
                 'host'     => env('REDIS_HOST', 'localhost'),
                 'password' => env('REDIS_PASSWORD', null),
                 'port'     => env('REDIS_PORT', 6379),
                 'database' => 0,
                 'timeout' => 15,
              ],
         ],

         'clusters' => [

             'default' => [
                 'scheme'   => env('REDIS_SCHEME', 'tcp'),
                 'host'     => env('REDIS_HOST', 'localhost'),
                 'password' => env('REDIS_PASSWORD', null),
                 'port'     => env('REDIS_PORT', 6379),
                 'database' => 0,
                 'timeout' => 15,
             ],
         ],
     ],

На основе информации, найденной здесь: https://github.com/nrk/predis/issues/480 - но необходимо также реплицировать все значения конфигурации по умолчанию в опциях -> параметрыгруппа

REDIS_HOST, указывает на конечную точку конфигурации в кластере redis AWSasticache.

...