Redis
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> Redis

Cách làm cho Laravel hoạt động với cụm Redis trên AWS

sau khi tìm kiếm và gỡ lỗi, đây là những gì đã làm cho nó hoạt động:

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

lưu ý:một lỗi rõ ràng trong cấu hình của tôi trong câu hỏi trên là tôi đã kết hợp máy chủ và cổng, tôi đã sửa ở đây. đây là tệp .env của tôi trông như thế nào:

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

lưu ý:tôi đã tạo cụm bằng cách sử dụng hướng dẫn tại đây:https://redis.io/topics/cluster-tutorial#creating-the-cluster

Phương pháp nghiên cứu

Do thực tế là:1. Tài liệu laravel / predis về vấn đề này còn thiếu2. Hầu hết các câu trả lời về tràn ngăn xếp đều nằm dọc theo những dòng sau: sau khi googling và tìm kiếm .. đây là điều đã giải quyết được cho tôi mà không cần giải thích nhiều về những gì đang xảy ra

Tôi nghĩ rằng tôi có thể giúp một chút bằng cách chỉ ra cách thức Tôi đã tìm thấy câu trả lời của mình cho những điều trên.

1) Giải quyết vấn đề lỗi

Để giải quyết lỗi này

local.ERROR:Symfony \ Component \ Debug \ Exception \ FatalThrowableError:Lỗi loại:Đối số 1 được chuyển tớiPredis \ Connection \ Parameters ::__ construct () phải thuộc kiểu mảng, số nguyên được cho, được gọi trong / Users / Shared / dev / php /toters-api/vendor/predis/predis/src/Connection/Factory.phpon dòng 164 trong / Users / Shared / dev / php / toters-api / provider / predis / predis / src / Connection / Parameters.php:34 Stack trace :

Tôi nhận ra rằng định dạng config / database.php của tôi chỉ đơn giản là sai. Googling trên tất cả không cho tôi bất kỳ hình ảnh rõ ràng nào, vì vậy tôi quyết định sử dụng xdebug và đi sâu vào mã. Lưu ý:Tôi đã in dấu vết ngăn xếp lỗi (được hiển thị trong câu hỏi ở trên) trong một tài liệu và tôi đã sử dụng tài liệu đó làm chế độ xem toàn cảnh để hướng dẫn tôi qua các bước gỡ lỗi (tức là bước qua / vào / ra, v.v. trong khi luôn in kết quả đầu ra trong một tài liệu riêng biệt và so sánh nó với config / database.php của tôi như một la bàn kiểm tra / gỡ lỗi sanity).

Sau khi tìm hiểu và tìm hiểu về printig, tôi nhận ra điều này:

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

Tôi đã so sánh điều này với nội dung tệp .env của mình:

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

và tôi nhận ra rằng định dạng không đúng, tôi không nên đặt cổng AND của máy chủ lưu trữ trong cùng một biến env .. vì vậy thay vào đó tôi đặt nó như vậy:

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

và điều đó đã giải quyết được vấn đề đầu tiên của tôi.

2) giải quyết các vấn đề khác

sau khi phần trên được sửa, tôi nhận được cái này

CLUSTERDOWN vùng băm không được phân phát

điều này khá dễ dàng, nó chỉ là vấn đề của googling thông báo lỗi (vì thông báo lỗi rõ ràng là thông báo lỗi redis gốc, chứ không phải là một số trình bao bọc thư viện khó hiểu như thông báo lỗi predis) .. và tôi đã tìm thấy câu trả lời này.

Phần còn lại thật dễ dàng.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để biết thời gian khóa của tôi được lưu trữ trong Redis Cache / db?

  2. Tại sao chỉ có một kết nối với redis được thực hiện trong chương trình gevent này?

  3. Redis Pub / Sub ServiceStack, hủy chuỗi

  4. Redis - Chỉ mục hết hạn không bị xóa

  5. Chia sẻ phiên với redis và hộ chiếu trên một miền phụ?