Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Cara membuat Laravel bekerja dengan cluster Redis di AWS

setelah mencari dan men-debug, inilah yang membuatnya bekerja:

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

catatan:satu kesalahan yang jelas dalam konfigurasi saya pada pertanyaan di atas adalah saya menggabungkan Host dan port, yang saya perbaiki di sini. seperti inilah tampilan file .env saya:

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

catatan:saya membuat cluster menggunakan petunjuk di sini:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Metodologi Penelitian

Karena kenyataan bahwa:1. Dokumentasi laravel/predis tentang ini kurang2. Sebagian besar jawaban tentang stack overflow adalah sebagai berikut:setelah googling dan mencari.. inilah yang berhasil bagi saya tanpa banyak penjelasan tentang apa yang terjadi

Saya pikir saya dapat membantu sedikit dengan menunjukkan bagaimana Saya menemukan jawaban saya di atas.

1) Memecahkan masalah kesalahan

Untuk mengatasi bug ini

local.ERROR:Symfony\Component\Debug\Exception\FatalThrowableError:Type error:Argumen 1 diteruskan kePredis\Connection\Parameters::__construct() harus bertipe array,integer diberikan, dipanggil di/Users/Shared/dev/php /toters-api/vendor/predis/predis/src/Connection/Factory.phpon baris 164 in/Users/Shared/dev/php/toters-api/vendor/predis/predis/src/Connection/Parameters.php:34Stack trace :

Saya menyadari bahwa format config/database.php saya salah. Googling ke mana-mana tidak memberi saya gambaran yang jelas, jadi saya memutuskan untuk menggunakan xdebug dan menyelami kodenya. Catatan:Saya memiliki jejak tumpukan kesalahan (ditunjukkan dalam pertanyaan di atas) yang dicetak dalam satu dokumen, dan saya menggunakannya sebagai pandangan sekilas untuk memandu saya melalui langkah-langkah debug (yaitu melangkahi/ke/keluar dll sambil selalu mencetak output dalam dokumen terpisah dan membandingkannya dengan config/database.php saya sebagai kompas pemeriksaan/debug kewarasan).

Setelah menggali dan mencetak, saya menemukan ini:

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

Saya membandingkan ini dengan konten file .env saya:

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

dan saya menyadari bahwa formatnya salah, saya seharusnya tidak meletakkan host DAN port dalam variabel env yang sama.. jadi saya katakan seperti ini:

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

dan itu memecahkan masalah pertama saya.

2) memecahkan masalah lain

setelah hal di atas diperbaiki, saya mendapatkan ini

CLUSTERDOWN Slot hash tidak ditayangkan

ini cukup mudah, itu hanya masalah googling pesan kesalahan (karena pesan kesalahan jelas merupakan pesan kesalahan redis asli, daripada beberapa pembungkus perpustakaan samar seperti pesan kesalahan predis) .. dan saya menemukan jawaban ini.

Sisanya mudah.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Redis Bersyarat disetel / hanya memperbarui dengan versi terbaru?

  2. Laravel - Caching Fasih dengan Pembaruan yang Sering

  3. Redis menyimpan string sebagai buffer pada beberapa OS, bukan yang lain?

  4. Pengantar Struktur Data Redis:Set

  5. Redis sentinel vs pengelompokan