Predis с laravel 5.5 «Нет доступных соединений в пуле в Aggregate / RedisCluster.php: 337»

Я установил 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: нет доступных соединений в пуле в vendor / predis / predis / src / Connection / Aggregate / RedisCluster.php: 337

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

0 vendor / predis / predis / src / Connection / Aggregate / RedisCluster.php (411):
Predis \ Подключение \ Совокупности \ RedisCluster-> guessNode (153)

1 поставщик / predis / predis / src / Connection / Aggregate / RedisCluster.php (388):
Predis \ Подключение \ Совокупности \ RedisCluster-> getConnectionBySlot (153)

2 vendor / predis / predis / src / Connection / Aggregate / RedisCluster.php (550):
Predis \ Подключение \ Совокупности \ RedisCluster-> GetConnection (Object (Predis \ Command \ StringSetExpire))

3 поставщик / predis / predis / src / Connection / Aggregate / RedisCluster.php (593):
Predis \ Подключение \ Совокупности \ RedisCluster-> retryCommandOnFailure (Object (Predis \ Command \ StringSetExpire),
‘ExecuteCommand’)

4 vendor / predis / predis / src / Client.php (331): Predis \ Connection \ Aggregate \ RedisCluster-> executeCommand (Объект (Predis \ Command \ StringSetExpire))

5 vendor / predis / predis / src / Client.php (314): Predis \ Client-> executeCommand (Объект (Predis \ Command \ StringSetExpire))

6 поставщик / laravel / framework / src / Illuminate / Redis / Connections / Connection.php (96):
Predis \ Client -> __ call (‘setex’, Array)

7 поставщик / laravel / framework / src / Illuminate / Redis / Connections / Connection.php (108):
Осветить \ Redis \ Connections \ Connection-> команда (‘setex’, массив)

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

9 vendor / laravel / framework / src / Illuminate / 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-> положить ( ‘5rr44TBjIPEgJSx …’,
‘a: 1: {s: 6: «_ flas …», 480)

11 vendor / laravel / framework / src / Illuminate / Session / Store.php (128): Illuminate \ Session \ CacheBasedSessionHandler-> write (‘5rr44TBjIPEgJSx …’,
‘А: 1: {s: 6: «_ Flas …’)

12 vendor / laravel / framework / src / Illuminate / Session / Middleware / StartSession.php (87):
Осветить \ Session \ магазин-> Save ()

13 поставщик / laravel / framework / src / Illuminate / Foundation / Http / Kernel.php (218):
Осветить \ Session \ Middleware \ StartSession-> прекратить (Object (Осветите \ Http \ Request),
Объект (Осветите \ Http \ Response))

14 поставщик / laravel / framework / src / Illuminate / Foundation / Http / Kernel.php (189):
Осветить \ Foundation \ Http \ kernel-> terminateMiddleware (Object (Осветите \ Http \ Request),
Объект (Осветите \ Http \ Response))

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

16 {главная}

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

  • PHP7.0
  • Laravel5.5
  • ОС (Debian GNU / Linux 9.6 (растяжка)), выпуск 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, но каждый раз, когда я получаю ту же ошибку.

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

3

Решение

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

    '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 AWS эластичного хранилища.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]