キャッシュとは
- 問い合わせに対する回答を記憶しておき、再度同じ問い合わせがあった時には記憶しておいた情報を再利用することで、システムのパフォーマンス向上、応答時間の短縮、サーバの負荷削減を図る技術
キャッシュは様々な階層で使われる
-
コンピュータのハードウェアレベルのキャッシュ(L1、L2、L3)
-
OSレベルのキャッシュ(ファイルシステムのページキャッシュや仮想アドレス-物理アドレスの変換情報のキャッシュであるTLBなど)
-
Webアプリケーションにおけるキャッシュ
- ブラウザキャッシュ
- CDNのキャッシュ
- ロードバランサのキャッシュ
- データベースのキャッシュ
- 分散キャッシュシステム(RedisやMemocachedなど)
共有キャッシュとプライベートキャッシュ
共有キャッシュとは文字通り複数のユーザ間で共有されるキャッシュのこと
例えばCDNのキャッシュは共有キャッシュである
あるユーザのリクエストによってCDNにキャッシュされた情報は、ほかのユーザが同じリクエストしたときに利用される
プライベートキャッシュは個々のユーザで独立したキャッシュのこと
ブラウザキャッシュはブラウザを利用している各ユーザ固有のキャッシュのためプライベートキャッシュにあたる
キャッシュ戦略
- 読み込み時のキャッシュ(Read-Through):
- データ要求時に、まずキャッシュをチェックする
- キャッシュにデータがない場合、データソース(通常はデータベース)からデータを取得し、キャッシュに保存してから返す
- 次回同じデータが要求された時、キャッシュからデータを取得する
- Read-Throughは、読み取り操作が多いアプリケーションに適している
- ブラウザキャッシュは読み込み時キャッシュ
- 書き込み時のキャッシュ(Write-Through):
- データ更新時、キャッシュとデータソースの両方に同時に書き込む
- 書き込み操作のパフォーマンスが低下する可能性があるが、キャッシュとデータソースの整合性が高い
- Write-Throughは、データの一貫性が重要な場合に使用される
- 書き込み時のキャッシュ(Write-Back):
- データ更新時、まずキャッシュにのみ書き込む
- データソースへの書き込みは後で(通常はバッチ処理で)行う
- 書き込み操作が高速化されますが、データの一時的な不整合が発生する可能性がある
- Write-Backは、高速な書き込みが必要で、多少のデータ遅延が許容される場合に適している
キャッシュの注意点
- キャッシュを長期に保存すると情報が陳腐化するため有効期限を設けるのが望ましい
- セキュリティ上重要なデータがキャッシュとして保存されていないか注意が必要
- ユーザ固有の情報がキャッシュされて他のユーザにアクセスされないように注意が必要
- その他、システムの要件や特性に合わせて適切な管理をしないとパフォーマンスが悪化することがある
参考文献