Я установил 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 {главная}
Технический стек, который я использовал:
Я попробовал следующие конфиги в 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, но каждый раз, когда я получаю ту же ошибку.
Любая помощь будет высоко оценен!
Это работает в нашей среде:
'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 эластичного хранилища.
Других решений пока нет …