概要
- 非常に今更ながらlaravelのキャッシュドライバについて簡単にまとめてみる。
裏話
- 今まで誰かが選択したキャッシュドライバを疑いもせずそのまま使ってきた。
- メリット・デメリットも知らずに使っていたのでここらで一回ちゃんと知識を入れようと思った。
- ついでにこれから使うことが多そうなAPIに向いているキャッシュドライバもまとめられればと思う。
ファイルドライバ
簡単 | 速い | APIに向いている |
---|---|---|
☆☆☆☆☆ | ☆ | ☆☆ |
- ファイルの情報を書き込むキャッシュ
- .envに記載すればいいだけなので非常に設定が楽である。デフォルトのドライバとして設定されている。
- ファイルに記載して、ファイルやら読み込んでのオーバーヘッドがあるためパフォーマンスがあまり良くない場合がある。
- ファイルで保持しているため、サーバーが再起動しても残り続ける。
- 小規模APIや開発環境やテスト環境では適している。大規模開発や高負荷には若干無理がある。
データベースドライバ
簡単 | 速い | APIに向いている |
---|---|---|
☆☆☆☆ | ☆ | ☆☆ |
- ドライバ名通り、DBを使ったキャッシュ
- .envファイルで指定して、
php artisan cache:table
を実行し、作られたマイグレーションファイルを実行するだけで使い始める事ができる。準備が比較的簡単である。 - keyカラムとvalueカラムで値を保持するので複雑なデータ型は苦手である。
- DBの読み書き速度がそのままキャッシュのパフォーマンスに影響する。
- 多量のデータ対し、キャッシュアクセスがあると不向き(WEBだろうがAPIだろうが)
Memcachedドライバ
簡単 | 速い | APIに向いている |
---|---|---|
☆☆ | ☆☆☆☆☆ | ☆☆☆☆ |
- 別途、パッケージのインストールが必要だったり、Memcacheサーバーの情報をconfig/cache.phpに書かないと行けない。
- データをメモリ上に保持するためオーバーヘッドが減らせる。かなり高パフォーマンスである。
- シンプルなキャッシュドライバで、文字列や数値などの単純なデータの保存に特化している。保存できる構造は限られている。
- 大量のデータを効果的に扱う事ができる。
- メモリ上に保持するからサーバーが再起動するとキャッシュデータは失われる。
- リッチなデータ型を必要としない、大規模なAPIに向いている。
Redisドライバ
簡単 | 速い | APIに向いている |
---|---|---|
☆☆ | ☆☆☆☆☆ | ☆☆☆☆ |
- 別途、拡張機能(PhpRedis PHP)のインストールが必要。Composerでpredis/predisパッケージをインストールする必要がある。
- データをメモリ上に保持するためオーバーヘッドが減らせる。かなり高パフォーマンス。
- データ構造をそのまま保持することができる。(リスト、セット、ハッシュ、ソートされたセットをサポートしている)
- 大量のデータを効果的に扱うことができる。
- メモリ上に保持するからサーバーが再起動するとキャッシュデータは失われる。
- 豊富なデータ型でキャッシュを利用する、大規模なAPIに向いている。
arrayドライバ
- テスト・デバッグ用ドライバで通常のコードでは使わない。
- メモリ上に保存されるため非常に高速である。ただ、大量のデータを扱う場合メモリが圧迫される。
- リクエストのサイクルが終了すると同時にクリアされる。
nullドライバ
- テスト・デバッグ用ドライバで通常のコードでは使わない。
- キャッシュを一切使わない、get, put, forgetなどの操作は行わず、無視される。
- キャッシュが原因で問題が発生しているかどうかを切り分けるのに便利である。
参考文献