sql >> データベース >  >> NoSQL >> Redis

LaravelをAWSのRedisクラスターで動作させる方法

    検索とデバッグの後、これが機能した理由です:

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

    注:上記の質問での構成の明らかな間違いの1つは、ホストとポートを組み合わせたことです。これをここで修正しました。これは私の.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:Type error:引数1がPredis \ Connection \ Parameters ::__construct()に渡されるのは、/ Users / Shared / dev/phpで呼び出される整数型の配列である必要があります/toters-api/vendor/predis/predis/src/Connection/Factory.phpon行164in/ Users / Shared / dev / php / toters-api / vendor / predis / predis / src / Connection / Parameters.php:34Stack trace :

    config/database.phpの形式が単に間違っていることに気づきました。全体をグーグルで検索しても明確な画像が得られなかったため、xdebugを使用してコードを詳しく調べることにしました。注:エラースタックトレース(上記の質問に表示)を1つのドキュメントに印刷し、それをデバッグ手順(つまり、常に出力を印刷しながらステップオーバー/イント/アウトなど)をガイドするための鳥瞰図として使用しました。別のドキュメントで、健全性チェック/デバッグコンパスとして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
    

    そして、フォーマットが間違っていることに気づきました。ホストとポートを同じ環境変数に入れるべきではないので、代わりにそのように置きます:

    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. ヨーマン、マングース、およびMongoDBスキャフォールディング

    2. MongoDBにはネイティブRESTインターフェースがありますか?

    3. Mongodbをシリアル化するJSON

    4. MongoDB-オブジェクト?なぜ集約して_idが必要なのですか