あるスタートアップが、ElastiCache for Redisをデータベースキャッシュとして導入しようとしている。データは頻繁に更新されるが、古いデータが数秒間表示されても許容される(結果整合性で可)。キャッシュヒット率を最大化しながら、データの鮮度を一定に保ちたい。最も適切なキャッシュ読み取り戦略はどれか。
- A. リードスルーキャッシュ:すべての読み取りをキャッシュ経由にし、キャッシュが自動でDBから取得する
- B. ライトスルーキャッシュ:データベース書き込みと同時にキャッシュも更新し、読み取りは常にキャッシュから行う
- C. キャッシュアサイドパターン:読み取り時にキャッシュミスが発生したらDBから取得してキャッシュに格納し、書き込み時はキャッシュを無効化(Delete)する。TTLを設定してキャッシュの自動期限切れを保証する
- D. ライトアラウンドキャッシュ:書き込みはDBに直接行い、読み取り時のみキャッシュを参照する(キャッシュへの初回ロードは読み取りミス時に実施)
解答と解説を見る
正解: C
キャッシュアサイドパターン(Lazy Loading)はアプリケーションがキャッシュとDBの両方を直接管理するパターンである。読み取り時のキャッシュミスでDBから取得してキャッシュに格納し、書き込み時にキャッシュを無効化(Deleteまたは更新)する。TTLを設定することで最悪でも数秒後にキャッシュが期限切れとなりDBから最新データが取得されるため、要件の「数秒間の古いデータ許容」と整合する。BのライトスルーはDB書き込みとキャッシュ更新の同時実行で遅延なくキャッシュを最新化できるが、書き込みのレイテンシが増加し、あまり参照されないデータもキャッシュに載るため効率が下がる。Aのリードスルーはキャッシュレイヤー(Redis)がDB取得ロジックを持つ必要があるが、一般的にElastiCache自体にはDB連携機能がないため実装が複雑になる。DのライトアラウンドはCと類似しているが、書き込み時にキャッシュを無効化しないため古いデータが長く残り、TTLに依存する分データ鮮度が低下する。