sql >> Databáze >  >> NoSQL >> Redis

Jak zajistit, aby Laravel fungoval s clusterem Redis na AWS

po hledání a ladění to fungovalo díky tomuto:

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

poznámka:Jedna zřejmá chyba v mé konfiguraci ve výše uvedené otázce byla, že jsem zkombinoval hostitele a port, který jsem zde opravil. takto vypadá můj soubor .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

poznámka:Vytvořil jsem cluster pomocí pokynů zde:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Metodika výzkumu

Vzhledem k tomu, že:1. Dokumentace laravel/predis k tomu chybí2. Většina odpovědí na přetečení zásobníku je v tomto smyslu:po googlování a hledání... tohle mi vyšlo bez velkého vysvětlení toho, co se děje

Usoudil jsem, že mohu trochu pomoci tím, že ukážu jak Našel jsem odpověď na výše uvedené.

1) Řešení problému s chybou

Chcete-li vyřešit tuto chybu

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Chyba typu:Argument 1 předán do Predis\Connection\Parameters::__construct() musí být typu array,integer given, voláno v/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.php řádek 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34 Trasování zásobníku :

Uvědomil jsem si, že můj formát config/database.php byl prostě špatný. Celé googlování mi nedalo žádný jasný obrázek, tak jsem se rozhodl použít xdebug a ponořit se do kódu. Poznámka:V jednom dokumentu jsem nechal vytisknout trasování zásobníku chyb (zobrazené v otázce výše) a použil jsem to jako pohled z ptačí perspektivy, který mě provede kroky ladění (tj. překročení/do/výstup atd., přičemž vždy tisknu výstupy v samostatném dokumentu a jeho porovnáním s mým souborem config/database.php jako kompasem pro kontrolu zdravého rozumu/ladění).

Po kopání a tisku jsem narazil na toto:

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

Porovnal jsem to s obsahem mého souboru .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

a uvědomil jsem si, že formát je špatný, neměl bych vkládat port hostitele AND do stejné proměnné env. Místo toho jsem to dal takto:

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

a tím jsem vyřešil můj první problém.

2) řešení ostatních problémů

po opravení výše uvedeného jsem dostal toto

CLUSTERDOWN Blok hash nebyl obsluhován

bylo to docela snadné, bylo to jen otázkou googlování chybové zprávy (protože chybová zpráva byla zjevně nativní chybová zpráva redis, spíše než nějaký záhadný obal knihovny jako chybová zpráva predis).. a našel jsem tuto odpověď.

Zbytek byl snadný.




  1. Závažná chyba – třída „Mongo“ nebyla nalezena

  2. Volání uložené funkce v mongodb

  3. Microsoft.Extensions.Caching.Redis vybrat jinou databázi než db0

  4. Odinstalujte mongoDB z ubuntu