Redis
 sql >> база данни >  >> NoSQL >> Redis

Как да накарам Laravel да работи с Redis клъстер на AWS

след търсене и отстраняване на грешки, това го накара да работи:

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

забележка:една очевидна грешка в моята конфигурация в горния въпрос беше, че комбинирах хоста и порта, които поправих тук. ето как изглежда моят .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

забележка:създадох клъстера, използвайки инструкциите тук:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Методология на изследването

Поради факта, че:1. Липсва документацията на laravel/predis за това2. Повечето от отговорите за препълването на стека са в следните линии:след гугъл и търсене.. това се получи за мен без много обяснения какво се случва

Реших, че мога да помогна малко, като покажа как Намерих отговора си на горното.

1) Решаване на проблема с грешката

За да разрешите този бъг

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Типова грешка:Аргумент 1 предаден наPredis\Connection\Parameters::__construct() трябва да бъде от типа масив, дадено цяло число, извикан в/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.phpon ред 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack trace :

Разбрах, че моят формат config/database.php просто е грешен. Търсенето в Google не ми даде никаква ясна картина, така че реших да използвам xdebug и да се потопя в кода. Забележка:Имах трасирането на стека на грешките (показано във въпроса по-горе) отпечатано в един документ и го използвах като изглед от птичи поглед, за да ме напътства през стъпките за отстраняване на грешки (т.е. прекрачване/влизане/излизане и т.н., докато винаги отпечатвам изходите в отделен документ и го сравнявам с моя config/database.php като компас за проверка/отстраняване на грешки).

След като разрових и разпечатах, попаднах на това:

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

Сравних това със съдържанието на моя .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

и разбрах, че форматът е грешен, не трябва да поставям хоста И порта в същата 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

и това реши първия ми проблем.

2) решаване на останалите проблеми

след като горното беше коригирано, получих това

CLUSTERDOWN Хеш слотът не се обслужва

това беше доста лесно, беше просто въпрос на гугъл на съобщението за грешка (тъй като съобщението за грешка очевидно беше естествено съобщение за грешка в redis, а не някаква загадъчна библиотека като съобщение за грешка predis).. и намерих този отговор.

Останалото беше лесно.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Какъв е смисълът на REDIS в стека ELK?

  2. Как мога да използвам redis с Django?

  3. Има ли нещо като Redis DB, но не ограничено с размера на RAM?

  4. Грешка в целина:резултат. изтече време за изчакване

  5. Как да стартирате Redis на Amazon OpsWorks за Rails приложение?