sql >> Database teknologi >  >> NoSQL >> Redis

Sådan får du Laravel til at fungere med Redis cluster på AWS

efter søgning og fejlretning, er det dette, der fik det til at virke:

'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'
        ],
    ]
]

bemærk:en åbenlys fejl i min konfiguration i ovenstående spørgsmål var, at jeg kombinerede værten og porten, som jeg rettede her. sådan ser min .env-fil ud:

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

Bemærk:Jeg oprettede klyngen ved at bruge instruktionerne her:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Forskningsmetode

På grund af det faktum, at:1. Laravel/predis dokumentationen herom mangler2. De fleste af svarene på stack overflow er på følgende måde:efter google og søgning.. er det, hvad der lykkedes for mig uden megen forklaring på, hvad der foregår

Jeg regnede med, at jeg kan hjælpe lidt ved at vise hvordan Jeg fandt mit svar på ovenstående.

1) Løsning af fejlproblemet

For at løse denne fejl

lokal.FEJL:Symfony\Component\Debug\Exception\FatalThrowableError:Typefejl:Argument 1 sendt til Predis\Connection\Parameters::__construct() skal være af typen array,heltal givet, kaldet i/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.phpon line 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack trace :

Jeg indså, at mit config/database.php-format simpelthen var forkert. Googling overalt gav mig ikke noget klart billede, så jeg besluttede at bruge xdebug og dykke ned i koden. Bemærk:Jeg fik udskrevet fejlstaksporingen (vist i spørgsmålet ovenfor) i ét dokument, og jeg brugte det som et fugleperspektiv til at guide mig gennem debug-trinene (dvs. at træde over/ind/ud osv., mens jeg altid udskriver outputtet i et separat dokument og sammenligne det med min config/database.php som et fornuftskontrol/debug-kompas).

Efter at have gravet og printet faldt jeg over dette:

[ *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)
  /

Jeg sammenlignede dette med min .env-fils indhold:

REDIS_DEFAULT_HOST=127.0.0.1:7000
REDIS_JOBS_HOST=127.0.0.1:7001
REDIS_CONTENT_HOST=127.0.0.1:7002

og jeg indså, at formatet var forkert, jeg skulle ikke sætte værten OG porten i den samme env-variabel.. så jeg satte det sådan i stedet:

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

og det løste mit første problem.

2) at løse de andre problemer

efter at ovenstående var rettet fik jeg dette

CLUSTERDOWN Hash-plads ikke tjent

dette var ret nemt, det var bare et spørgsmål om at google fejlmeddelelsen (da fejlmeddelelsen tydeligvis var en indbygget redis-fejlmeddelelse, snarere end en kryptisk biblioteksindpakning som predis-fejlmeddelelse). og jeg fandt dette svar.

Resten var let.




  1. Fejlfinding Tilladelse nægtet ved forsøg på at oprette forbindelse til Redis fra PHP-script

  2. Opret et wildcard-indeks i MongoDB

  3. hvordan kan man gemme en Json i redis med hashmap(HSET)

  4. Node.js, Socket.io, Redis pub/sub høj lydstyrke, lav latency vanskeligheder