Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Jak sprawić, by Laravel działał z klastrem Redis na AWS

po wyszukiwaniu i debugowaniu oto, co sprawiło, że zadziałało:

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

uwaga:jednym oczywistym błędem w mojej konfiguracji w powyższym pytaniu było to, że połączyłem hosta i port, który tutaj naprawiłem. tak wygląda mój plik .env:

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

uwaga:utworzyłem klaster, korzystając z instrukcji tutaj:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Metodologia badań

Ze względu na to, że:1. Brakuje dokumentacji laravel/predis na ten temat2. Większość odpowiedzi na temat przepełnienia stosu wygląda następująco:po wyszukiwaniu i wyszukiwaniu w Google… tak mi się udało bez większego wyjaśnienia, co się dzieje

Pomyślałem, że mogę trochę pomóc, pokazując jak Znalazłem odpowiedź na powyższe.

1) Rozwiązywanie problemu z błędem

Aby rozwiązać ten błąd

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argument 1 przekazany do Predis\Connection\Parameters::__construct() musi być typu array, podana liczba całkowita, wywołana w/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.phppon line 164 w/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Śledzenie stosu :

Zdałem sobie sprawę, że mój format config/database.php był po prostu błędny. Całe googlowanie nie dało mi wyraźnego obrazu, więc zdecydowałem się użyć xdebug i zagłębić się w kod. Uwaga:miałem wydrukowany ślad stosu błędów (pokazany w powyższym pytaniu) w jednym dokumencie i użyłem go jako widoku z lotu ptaka, aby poprowadzić mnie przez kroki debugowania (tj. w osobnym dokumencie i porównując go z moim plikiem config/database.php jako kompasem do sprawdzania/debugowania poprawności).

Po wykopaniu i wydrukowaniu natknąłem się na to:

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

Porównałem to z zawartością mojego pliku .env:

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

i zdałem sobie sprawę, że format jest zły, nie powinienem umieszczać portu hosta AND w tej samej zmiennej env .. więc zamiast tego umieściłem to w ten sposób:

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

i to rozwiązało mój pierwszy problem.

2) rozwiązywanie innych problemów

po naprawieniu powyższego otrzymałem to

CLUSTERDOWN Hash slot nie jest obsługiwany

to było dość łatwe, była to tylko kwestia wygooglowania komunikatu o błędzie (ponieważ komunikat o błędzie był wyraźnie natywnym komunikatem o błędzie redis, a nie jakimś tajemniczym opakowaniem biblioteki, takim jak komunikat o błędzie predis).. i znalazłem tę odpowiedź.

Reszta była łatwa.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zbudować obraz dockera z repozytorium github

  2. Jak odzyskać dane redis z migawki (pliku rdb) skopiowanego z innego komputera?

  3. Akcenty przechowywane w Redis nie są czytelne

  4. 2 podejścia do śledzenia użytkowników online za pomocą Redis. Który jest szybszy?

  5. Redis i Memcache czy po prostu Redis?