☑️ ElastiCacheとは?キャッシュDBの代表選手
Amazon ElastiCache は、AWSが提供するNoSQL型のフルマネージドなインメモリ型のキャッシュデータベースサービスです。
高頻度で参照されるデータや、検索に時間がかかるようなデータをあらかじめメモリ上にキャッシュしておくことで、アプリケーションの応答性能をミリ秒未満という速度で取り出すことができます。
例えば、Webアプリケーションにデータの転送要求を出してからデータが実際に出力されるまでの応答速度を高速化させたり、リアルタイムIoTといったリアルタイムでデータ処理が必要なIoTアプリケーションに向いています。
ElastiCacheは以下の2つのKVS(Key-Value Store)型のNoSQL DBエンジンをサポートしています:
- Memcached(メモキャッシュディー):シンプルな高速キャッシュDB
- Redis(レディス):Remote Dictionary Serverの略。多機能で永続性・可用性にも優れたキャッシュDB
🔹 Key-Value型とは? データ(Value)とそれを識別するキー(Key)をペアで管理するシンプルな構造のデータ形式です。
☑️ ElastiCacheの2つのエンジン
★ Memcachedの特徴(速度特化)

- KVS(Key-Valueストア)型インメモリDBのデファクトスタンダードとして広く利用されているエンジン。
- シンプルで軽量な設計で、データ処理パフォーマンスの向上に特化したキャッシュシステム。
- データの永続性はなく、再起動や障害時にはデータ消失してしまう。
- マルチAZやレプリケーションは非対応
- 主な用途:セッション情報、クエリ結果、Webページキャッシュなど画像ファイルやメタデータなどのオブジェクトのキャッシュに使われる。
利用に向いているケース:
- シンプルなキャッシュ構成が欲しい
- 万が一データが消えてもシステムに影響が少ない
- 頻繁にスケールイン/アウトする可能性がある
★ Redisの特徴(多機能)

- Memcachedと同じくKVS型インメモリDBだが、多彩なデータ構造(リスト、セット、ハッシュなど)を利用可能
- メッセージングやリアルタイム分析、チャットなどにも利用
- レプリケーション、マルチAZ、自動フェイルオーバー対応
- 永続化機能(AOF/RDB)あり:設定次第で耐久性を高められる。ただ、MemoryDB for Redisのほうが高耐久
AOFとは
Append Only Fileの略で、DBに対する操作ログが保存されているファイルのこと。
実際のコマンドの履歴が保管されているので、ElastiCacheのインスタンスが停止してしまっても
起動時にAOFのコマンドを順番に実行することで、元の状態に戻すことができる。
RDBとは
Redis DataBaseの略で、ElastiCache for Redisのスナップショット(バックアップ)のこと。
取得時点のデータを保存するので、障害発生時は、直近のスナップショットの状態まで戻せる。
高頻度のバックアップが不要な場合や、読み取り性能を優先する用途に適している。
一般的な運用では、RDBで定期スナップショットを取りつつ、AOFで変更履歴を記録することで、
障害時にはRDBで復元した後、そこからAOFで直近の操作まで戻す、という流れがとられる。
利用に向いているケース:
- 永続性のあるキャッシュが必要
- 高可用性を求める(自動フェイルオーバー)
- より複雑なデータ構造を扱いたい
☑️ MemcachedとRedisの違いまとめ
| 特徴 | Memcached | Redis |
|---|---|---|
| データ構造 | 単純なKey-Valueのみ | リスト、セットなど多彩 |
| 永続性 | ✗ | ○(設定必要) |
| スレッド | マルチスレッド | シングルスレッド(Redis6以降で一部マルチスレッド対応) |
| シャーディング | クライアント側対応 | 内部で分散も可 |
| マルチAZ | ✗ | ○ |
| レプリケーション | ✗ | ○ |
💡 メモ:Redisは「記憶しない」Memcachedに比べて、「思い出すのは強い」タイプのデータベースです
☑️ Memcached 版 ErastiCacheの構成
■ クラスタ構成
- Memcachedクラスタは最大40のElastiCacheインスタンス(ノード)で構成。
用途によってインスタンス数を増減できる。
例)Appのキャッシュ要件で80GBのキャッシュ容量が必要な場合
各ノードのメモリ量4GBを20個以上用意する必要がある。
- クラスタ内に保存されるデータは各インスタンスに分散される。
■ エンドポイント
Redis版ElastiCacheのアクセス用エンドポイントは以下3つ。
①ノードエンドポイント
→クラスタ内の各ノードに個別アクセスするためのエンドポイント
特定のノードにのみ必ずアクセスしたい場合に使用。
②設定エンドポイント
→クラスタ全体に割り当てられるエンドポイント。
クラスタ内のノード増減を管理し、クラスタの構成情報を自動的に更新する。
AppからElastiCacheサービスに接続する際はこのエンドポイントを使用
■ スケーリング
- Memcachedクラスタでは下記から必要に応じてリソースを調整できる。
①スケールアウト/イン
※注意:クラスタのデータはクラスタ内の各ノードに分散されて保存する為、ノード増減させた場合、
正しいノードにデータが再マッピングされるまでの間、キャッシュミスが一時的に増加する
②スケールアップ/ダウン
※注意:アップ/ダウン時は新規のクラスタを作成する必要がある
また、揮発性なので、再作成時に保持したデータは全削除される。
☑️ Redis版 ElastiCache の構成
■ クラスタ構成
- Redis版では、クラスタモードの有効/無効に応じて冗長化の構成が変化。
また、Memcachedとの大きな違いとして【マルチAZ構成】を作成可能なため、マスターインスタンスが障害状態になったときにはリードレプリカがマスターに【昇格】することができる。
①クラスタモード無効
→キャッシュデータはすべて1つのElastiCacheインスタンスに保存。
同じデータを持つリードレプリカを最大5つまで作成できる。
1つのマスターインスタンスとリードレプリカのまとまりを【シャード】という。
古いバージョンのRedisに対応するのに必要なので現状非推奨な設定。
②クラスタモード有効
→有効時は最大500のシャード(プライマリノード×1とレプリカノード×nのまとまり)に
dataを分割して保存する構成が可能。
リードレプリカは1つのシャードに対して最大5つまで作成可能。
このようにデータを分散することでRead/Writeの負荷分散構成を作成可能。
マスターインスタンス ≒ プライマリノードです。
また、リードレプリカ ≒ レプリカノードです。
クラスタモード無効と有効の違いで少し意味合いが異なるだけで基本的には同じ意味で問題ありません。
■ エンドポイント
・Redis版ElastiCacheのアクセス用エンドポイントは以下3つ。
①ノードエンドポイント
→クラスタ内の各ノードに個別アクセスするためのエンドポイント。
特定のノードにのみ必ずアクセスしたい場合に使用。クラスタモードが無効/有効どちらでも使える。
②プライマリエンドポイント
→書き込み処理用のElastiCacheインスタンスへアクセスするためのエンドポイント。
クラスタモードが無効の場合のみ使用する。
③設定エンドポイント
→クラスタモードが有効の場合に、この設定エンドポイントを使ってElastiCacheクラスタに対する
すべての操作を行うことが可能。
☑️ キャッシュ管理戦略
ElastiCache(特にRedis)では、以下のようなキャッシュ戦略をアプリケーション側で実装することで、ヒット率や応答性を最適化できます。
【Lazy Loading】
- キャッシュにデータがなければ、DBから取得してキャッシュに保存する戦略
- 初回アクセスは遅くなるが、その後は高速化
【Write-Through】
- 書き込み時にDBとキャッシュの両方を同時更新
- 常にキャッシュに最新データがある可能性が高い
【Write-Behind】
- まずキャッシュに書き込み、DBには後で非同期に反映
- 書き込み性能は高いが、障害時のデータ損失に注意
☑️ これらはElastiCacheの機能として自動適用されるものではなく、開発者がロジックに組み込む必要があります
☑️ まとめ
ElastiCacheは、キャッシュを利用することでWebアプリの応答性を高めることができる有力なAWSサービスです。
- Memcachedはシンプルなキャッシュ向け
- Redisは多機能、高可用性向け
- キャッシュ戦略はアプリ側の実装による
SAA試験にも出題されやすいポイントなので、特徴と違いをしっかりと抽象化して覚えておきましょう。

コメント