sql >> Database >  >> NoSQL >> Redis

Laravel laten werken met Redis-cluster op AWS

na zoeken en debuggen, is dit wat het heeft laten werken:

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

opmerking:een voor de hand liggende fout in mijn configuratie in de bovenstaande vraag was dat ik de host en poort combineerde, die ik hier heb opgelost. zo ziet mijn .env-bestand eruit:

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

opmerking:ik heb het cluster gemaakt met behulp van de instructies hier:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Onderzoeksmethodologie

Doordat:1. De laravel/predis documentatie hierover ontbreekt2. De meeste antwoorden op stack-overflow zijn als volgt:na googlen en zoeken.. dit is wat voor mij werkte zonder veel uitleg over wat er aan de hand is

Ik dacht dat ik een beetje kon helpen door te laten zien hoe Ik heb mijn antwoord op het bovenstaande gevonden.

1) Het foutprobleem oplossen

Om deze bug op te lossen

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argument 1 doorgegeven aan Predis\Connection\Parameters::__construct() moet van het type array zijn, integer gegeven, genaamd in/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.phpon lijn 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack trace :

Ik realiseerde me dat mijn config/database.php-formaat gewoon verkeerd was. Overal Googlen gaf me geen duidelijk beeld, dus besloot ik xdebug te gebruiken en in de code te duiken. Opmerking:ik had de foutstacktracering (weergegeven in de bovenstaande vraag) in één document afgedrukt en ik gebruikte dat als een vogelvlucht om me door de foutopsporingsstappen te leiden (dwz over/in/uit enz. Terwijl ik altijd de uitvoer afdrukte in een apart document en vergelijk het met mijn config/database.php als een sanity check/debug-kompas).

Na graven en printen kwam ik dit tegen:

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

Ik vergeleek dit met de inhoud van mijn .env-bestand:

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

en ik realiseerde me dat het formaat verkeerd was, ik zou de host EN-poort niet in dezelfde env-variabele moeten plaatsen .. dus plaatste ik het in plaats daarvan zo:

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

en dat loste mijn eerste probleem op.

2) de andere problemen oplossen

nadat het bovenstaande was opgelost kreeg ik dit

CLUSTERDOWN Hash-slot niet beschikbaar

dit was vrij eenvoudig, het was gewoon een kwestie van googelen op de foutmelding (aangezien de foutmelding duidelijk een native redis-foutmelding was, in plaats van een cryptische bibliotheekwrapper zoals predis-foutmelding) en ik vond dit antwoord.

De rest was makkelijk.




  1. Exporteer geldige json uit mongodb-verzameling

  2. MongoDB converteert datum naar string

  3. De 10 beste MongoDB-hostingplatforms

  4. Redis massa-insertie