キャッシュ
CPUのバスやネットワークなど様々な情報伝達経路において、ある領域から他の領域へ情報を転送する際、その転送遅延を極力隠蔽し転送効率を向上するために考案された記憶階層の実現手段
さまざまなレイヤに存在する
ブラウザ
コンピュータの電源がオフになるか、その他の特定の状況で消去される このインメモリキャッシュは、各ブラウザのRendererプロセスに存在する ServiceWorkerはHTTPをinterceptする RFC7234で定められているブラウザキャッシュ(=HTTPキャッシュ≒ディスクキャッシュ) APIサーバのインメモリ
更新パターン
データをキャッシュとバックエンドストレージの両方に同時に書き込む
データの整合性が確保されるが書き込みのレイテンシが増加する可能性がある
writeのパフォーマンスが向上するがデータの損失リスクが増加する
この方法では、新しいまたは更新されたデータは直接データストアに書き込まれ、キャッシュは更新されない データが後で読み出されるときに、キャッシュにロードされる writeが頻繁に行われるがreadが比較的少ないシステムで有効で、キャッシュの不要な汚染を防げる
システムが休止状態の時に、将来的に必要になりそうなデータを予めキャッシュにロードしておく手法 アプリケーションの起動時に変更されない情報を全て取得し、プロセス内に持っておく場合やデプロイ時に作り直すパターンなども該当 データが実際に必要になったときのみキャッシュにロードする
データが要求されると、キャッシュに存在しない場合はデータストアから読み込み、キャッシュに保存する
必要のないデータをキャッシュすることを避けられるが初回アクセスは遅くなる
アプリケーションまたはデータアクセス層が、キャッシュにデータが存在しないかを確認し、存在しない場合にはデータストアからデータを取得してキャッシュに保存
データの更新はデータストアに直接行い、関連するキャッシュは無効化または更新する
Lazy Loadingの一形態だがより積極的な無効化や更新が行われる
生存期間パターン
ランダムにアイテムを選んでキャッシュから削除する
実装が非常にシンプルである一方で、パフォーマンスは最適ではないことが多い
短期的なセッションデータや一過性のイベント情報など、一定時間後には関連性が低くなるデータを定期的に削除するために使われる
キャッシュされたデータが特定のイベントの発生時や一定時間の経過など、定期的に自動的に更新する
システムは、データが再度必要になる前に、バックグラウンドでキャッシュを更新する
データの更新パターンが予測可能である場合に有効
キャッシュされたデータに対して、一定の時間が経過すると自動的に更新を行う
これはRefresh-Aheadと似ているが特定のデータやパターンに基づかず、時間ベースで一律に更新を行う
2023年
キャッシュは麻薬と言われていますが、絶対に避けなければいけないものではありません。整合性が壊れやすくなることが問題なのです。
以下の3点を決める必要がある
キャッシュする対象
コストの高い計算結果