Laravel
LaravelのRedisで「array_key_exists() expects parameter 2 to be array, int given」の解決方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
オススメ本
Laravel の Redis の設定をしている際に、
「array_key_exists() expects parameter 2 to be array, int given」
とエラーが出てしまった時の解決方法についてまとめました。
検証した環境
PHP 7.4
Laravel 6
predis 2.2
クラスターモード
結論
config/database.php の記述が間違っている。
本来、配列が予期されているところ に数字が来てしまっている。
'redis' => [
'client' => env('REDIS_CLIENT', 'predis'),
'options' => [
'cluster' => env('REDIS_CLUSTER', 'redis'),
],
'clusters' => [
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 0,
],
],
],
],
この default の部分が、以下のように間違っていた。
//これは間違っている時の例
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 0,
],
クラスタモードと通常モードで default 以下の構造が違う
通常の書き方
'default' => [
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
'read_write_timeout' => 60,
],
クラスタの書き方
'default' => [
[
'host' => env('REDIS_HOST', 'localhost'),
'password' => env('REDIS_PASSWORD', null),
'port' => env('REDIS_PORT', 6379),
'database' => 0,
],
],
ここだけピックアップして見ると違うことに気づきやすいですが、その他色々書かれている状況だとなかなか気づきにくいです。
ちなみに、僕はクラスタモードに変更する際に、通常の default のところをコピーして使用したため残念ながらここでハマってしまいました。
まとめ
以上です。誰かの参考になればと思います。
このブログは広告のクリックによって支えられています。ありがとうございます。
それでは!
人気記事
フィードバックのお願い
この記事のフィードバックがありましたらYoutubeの適当な動画にコメントしていただいたり、お問い合わせからご連絡ください。