Nach dem Suchen und Debuggen hat es folgendes funktioniert:
'redis' => [
'client' => 'predis',
'cluster' => true,
'options' => [
'cluster' => 'redis',
'parameters' => [
'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_DEFAULT_PORT', 6379),
'database' => 0,
],
],
'clusters' => [
'default' => [
'host' => env('REDIS_DEFAULT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_DEFAULT_PORT', 6379),
'database' => 0,
],
'jobs' => [
'host' => env('REDIS_JOBS_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_JOBS_PORT', 6379),
'database' => 0,
],
'content' => [
'host' => env('REDIS_CONTENT_HOST', '127.0.01'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_CONTENT_PORT', 6379),
'database' => 0,
],
'options' => [
'cluster' => 'redis'
],
]
]
Hinweis:Ein offensichtlicher Fehler in meiner Konfiguration in der obigen Frage war, dass ich Host und Port kombiniert habe, was ich hier behoben habe. So sieht meine .env-Datei aus:
REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1
REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002
Hinweis:Ich habe den Cluster anhand der Anweisungen hier erstellt:https://redis.io/topics/cluster-tutorial#creating-the-cluster
Forschungsmethodik
Aufgrund dessen:1. Die Laravel/Predis-Dokumentation dazu fehlt2. Die meisten Antworten zum Stapelüberlauf gehen in diese Richtung:nachdem ich gegoogelt und gesucht habe ... das hat für mich geklappt ohne viel Erklärung dessen, was vor sich geht
Ich dachte mir, ich kann ein bisschen helfen, indem ich wie zeige Ich habe meine Antwort auf die obige Frage gefunden.
1) Lösung des Fehlerproblems
Um diesen Fehler zu beheben
local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argument 1 übergeben an Predis\Connection\Parameters::__construct() muss vom Typ Array sein, ganze Zahl angegeben, aufgerufen in/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.php in Zeile 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack-Trace :
Mir wurde klar, dass mein config/database.php-Format einfach falsch war. Überall zu googeln gab mir kein klares Bild, also entschied ich mich, xdebug zu verwenden und in den Code einzutauchen. Hinweis:Ich hatte den Fehler-Stack-Trace (in der obigen Frage gezeigt) in einem Dokument gedruckt, und ich habe das als Vogelperspektive verwendet, um mich durch die Debug-Schritte zu führen (dh Über-/Ein-/Aussteigen usw., während immer die Ausgaben gedruckt werden). in einem separaten Dokument und vergleiche es mit meiner config/database.php als Plausibilitätsprüfung/Debug-Kompass).
Nach dem Graben und Drucken bin ich auf Folgendes gestoßen:
[ *Locals ] [ Superglobals ] [ User defined constants ]
- Locals at /Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Client.php:55
▾ $options = (array [1])
\
⬦ $options["cluster"] = (string [5]) `redis`
/
▾ $parameters = (array [4])
\
⬦ $parameters[0] = (string [14]) `127.0.0.1:7000`
|
⬦ $parameters[1] = (null)
|
⬦ $parameters[2] = (int) 6379
|
⬦ $parameters[3] = (int) 0
/
▾ $this = (Predis\Client [3])
\
⬦ $this->connection = (null)
|
⬦ $this->options = (null)
|
⬦ $this->profile = (null)
/
Ich habe dies mit dem Inhalt meiner .env-Datei verglichen:
REDIS_DEFAULT_HOST=127.0.0.1:7000
REDIS_JOBS_HOST=127.0.0.1:7001
REDIS_CONTENT_HOST=127.0.0.1:7002
und mir wurde klar, dass das Format falsch war, ich sollte den Host UND den Port nicht in dieselbe env-Variable setzen. Also habe ich es stattdessen so gesetzt:
REDIS_DEFAULT_HOST=127.0.0.1
REDIS_JOBS_HOST=127.0.0.1
REDIS_CONTENT_HOST=127.0.0.1
REDIS_DEFAULT_PORT=7000
REDIS_JOBS_PORT=7001
REDIS_CONTENT_PORT=7002
und das löste mein erstes Problem.
2) Lösen der anderen Probleme
nachdem das obige behoben wurde, habe ich das bekommen
CLUSTERDOWN Hash-Slot nicht bereitgestellt
Das war ziemlich einfach, es war nur eine Frage des Googelns der Fehlermeldung (da die Fehlermeldung eindeutig eine native Redis-Fehlermeldung war und keine kryptische Bibliotheks-Wrapper wie Predis-Fehlermeldung). und ich fand diese Antwort.
Der Rest war einfach.