AWSのキャッシュ使い分け|CloudFront・ElastiCache・DAXをどこに置くか
「読み取りが遅い」「DB の負荷が高い」という問題文には、たいていキャッシュが絡みます。AWS には置き場所の違うキャッシュがいくつもあり、どこで何をキャッシュするかを選ぶのがポイントです。
3つのキャッシュの違い
| サービス | 置き場所 | キャッシュするもの | 向いている場面 |
|---|---|---|---|
| CloudFront | エッジ(ユーザーの近く) | HTTPレスポンス(画像・動画・HTML・APIの応答) | 世界中のユーザーへの配信を速くしたい |
| ElastiCache | アプリとDBの間 | 任意のデータ(クエリ結果・セッションなど) | RDB の読み取り負荷を下げたい、セッションを共有したい |
| DAX | DynamoDB の前 | DynamoDB の読み取り結果 | DynamoDB の読み取りをマイクロ秒にしたい |
試験のコツ:「DynamoDB」「マイクロ秒」「アプリの変更を最小限に」→ DAX。DAX は DynamoDB と互換の API を持つので、接続先を変えるだけで使えます。RDS の読み取り負荷なら ElastiCache かリードレプリカです。
ElastiCache のキャッシュ戦略
- 遅延読み込み(Lazy Loading):まずキャッシュを見て、無ければ DB から読んでキャッシュに入れる。必要なデータだけが入るが、初回は遅く、データが古くなることがある
- 書き込みスルー(Write-Through):DB に書くときに同時にキャッシュも更新する。データは常に新しいが、使われないデータもキャッシュに入る
- TTL(有効期限):どちらの戦略でも、TTL を付けて古いデータが残り続けないようにする
Redis 系と Memcached の違い
| Redis / Valkey | Memcached | |
|---|---|---|
| データ構造 | 豊富(リスト・ソート済みセット など) | シンプルなキー・バリュー |
| レプリケーション / フェイルオーバー | あり(Multi-AZ) | なし |
| 永続化・バックアップ | あり | なし |
| マルチスレッド | — | あり |
よくあるひっかけ:「ランキング(リーダーボード)」「高可用性」「バックアップ」と来たら Redis 系。「シンプルなキャッシュをマルチスレッドで」なら Memcached です。
そのほかのキャッシュ
- API Gateway のキャッシュ:REST API のステージ単位で応答をキャッシュ
- RDS リードレプリカ:厳密にはキャッシュではないが、読み取り負荷の分散で比較される
- Global Accelerator:キャッシュはしない。AWS のネットワーク経由で TCP/UDP 通信を速くする(CloudFront との違いがよく問われる)
理解度チェック:ゲームのランキングをリアルタイムに表示したい。DB への負荷も抑えたい。何を使う?
ElastiCache(Redis / Valkey)のソート済みセット。スコアの更新と順位の取得を高速に処理できます。
まとめ
- ユーザーの近く → CloudFront、アプリと DB の間 → ElastiCache、DynamoDB の前 → DAX
- 遅延読み込みは必要なものだけ、書き込みスルーは常に新しく。TTL を忘れずに
- 高機能・高可用なら Redis 系、シンプル・マルチスレッドなら Memcached