ITの教科書検索
入門読了 約12分

Amazon ElastiCacheとは ― キャッシュ戦略

ElastiCacheは、よく読むデータをメモリに置いてデータベースへの問い合わせを減らすAWSのサービスです。遅延読み込みと書き込みスルー、TTL、エンジンの違いを整理します。

目次
  1. Amazon ElastiCacheとは
  2. キャッシュのヒットとミス
  3. 遅延読み込み
  4. 書き込みスルー
  5. TTLで組み合わせる
  6. 動かして確かめる:読み出しを繰り返す
  7. Valkey・Redis OSS・Memcachedの違い
  8. サーバーレスとノードベース
  9. 使いどころとDAX・CloudFrontとの違い
  10. 料金の決まり方
  11. 練習問題

Amazon ElastiCacheとは、データベースの前に置くインメモリのキャッシュ

同じデータを何度もデータベースから読むと、そのたびに時間と費用がかかります。よく読むデータをメモリに置いて返し、データベースへの問い合わせを減らすのが、Amazon ElastiCacheです。メモリ上のキャッシュをAWSが構築・管理するサービスです。アプリとデータベースの間に置いて使います。

データベースそのものは、RDSやDynamoDBなど別のサービスに置きます。ElastiCacheが保持するのは、そのデータのコピーです。機器の用意・監視・故障したノードの交換・ソフトウェアの更新は、AWSが行います。

キャッシュのヒットとミスで、データベースへの問い合わせの有無が決まる

アプリは、データが必要なときに、まずキーを指定してElastiCacheを読みます。値があれば、ElastiCacheがそのまま返します。この場合をキャッシュヒットと呼びます。

値が無いときや期限が切れているときは、キャッシュミスです。この場合は、アプリがデータベースに問い合わせ、受け取った結果をElastiCacheに書き込みます。次に同じキーを読むと、ヒットします。

ヒット:キャッシュにあるアプリElastiCacheメモリデータベースRDSなど①キーで読む②値を返す問い合わせないミス:キャッシュに無いアプリElastiCacheメモリデータベースRDSなど①キーで読む②無いと返す⑤書き込む③問い合わせる④結果を返す
ヒットならElastiCacheが値を返して終わります。ミスのときは、アプリがデータベースに問い合わせ、受け取った結果をElastiCacheに書き込みます。色の付いた手順が、ミスで増える分です。

AWSのユーザーガイドの説明では、データベースへの問い合わせはキャッシュからキーで値を探すより遅く、費用もかかります。ElastiCacheは、メモリに置いたキーと値の組を1ミリ秒未満で読めるように設計されています。複数の表を結合する重い問い合わせも、結果をキャッシュしておけば、実行は1回で済みます。

保存した結果を期限まで再利用する考え方は、DNSの記事やCDNの記事で説明したキャッシュと同じです。キャッシュに向くのは、何度も読まれ、あまり変わらないデータです。頻繁に変わるデータや、めったに読まれないデータは、キャッシュしても効果がありません。

ユーザーガイドは、キャッシュしたデータは古いものとして扱うよう勧めています。どこまで古い値を許容できるかは、データの用途で決まります。キャッシュにいつデータを保存するかの決め方が、次の2つの戦略です。

遅延読み込みは、ミスしたときだけキャッシュに保存する

前の節の図の流れが、遅延読み込みです。必要になったデータだけを、読み出しでミスしたときにキャッシュに保存します。AWSの資料は、キャッシュアサイドとも呼ばれるこの方法を、最も広く使われるキャッシュの方法としています。

遅延読み込みでは、読まれたデータだけがキャッシュに保存されます。そのため、読まれないデータでメモリが埋まりません。ノードが故障して空のノードに交換されても、ミスが増えて遅くなるだけで、アプリは動き続けます。

欠点は2つあります。1つは、ミスのたびにキャッシュ・データベース・キャッシュと3回の往復が必要で、応答に時間がかかることです。もう1つは、データベースの値を書き換えても、キャッシュの値が古いまま残ることです。

書き込みスルーは、データベースに書き込むたびにキャッシュにも書き込む

書き込みスルーは、アプリがデータベースに書き込むたびに、キャッシュにも同じ値を書き込む方法です。キャッシュの値は書き込みのたびに更新されるので、古くなりません。その代わり、書き込みのたびに、データベースとキャッシュの2回の書き込みが必要です。

読まれないデータまでキャッシュに保存されるので、メモリが無駄になります。ユーザーガイドは、TTLを付けるとこの無駄を減らせるとしています。

故障したノードを交換したときや、ノードを追加したときは、新しいノードは空の状態から始まります。データベースに書き込まれるまで、そのデータは新しいノードにありません。ユーザーガイドは、遅延読み込みと組み合わせると、このデータの欠落を減らせるとしています。

遅延読み込みと書き込みスルーの違い(Amazon ElastiCache User Guideをもとに作成)
比べる点遅延読み込み書き込みスルー
キャッシュに保存するとき読み出しでミスしたときデータベースに書き込んだとき
古いデータ残ることがある残らない
時間がかかる操作ミスした読み出しすべての書き込み
空のノードに交換したときミスは増えるが動作は続く書き込まれるまでデータが無い
読まれないデータ保存されない保存される

TTLで期限を付けて、2つの戦略を組み合わせる

TTLは、キーの期限が切れるまでの時間です。キャッシュに書き込むときに付けておくと、期限が切れたキーは無いものとして扱われます。アプリはデータベースから読み直し、キャッシュを更新します。

ユーザーガイドの例は、遅延読み込みと書き込みスルーのどちらにも、300秒のTTLを付けています。TTLを付けても、値が古くならないことまでは保証されません。それでも、古くなりすぎるのを防ぎ、読まれないデータがメモリを占有するのも減らせます。

期限はValkeyとRedis OSSでは秒かミリ秒で、Memcachedでは秒で指定します。DNSの応答のTTLと同じく、キャッシュを使ってよい期間を表します。IPヘッダのTTLは、ルータを1台通過するたびに1減る値で、別のものです。

動かして確かめる:読み出しを繰り返して、ヒットとミスの違いを見る

次の図で戦略を選び、操作を1つずつ進めます。要求が届いた箱と矢印が強調され、アプリが受け取った値が最新か古いかが分かります。

1 / 5最初の状態
アプリElastiCache空データベースA:1000円
キャッシュは空です。データベースには、商品Aの価格1000円が入っています。

遅延読み込みでは、5段目で古い1000円が返ります。両方+TTLでは、期限が切れたあとの読み出しでデータベースに問い合わせ、最新の値を取得し直します。

Valkey・Redis OSS・Memcachedの違いは、データの型と複製

ElastiCacheでは、キャッシュの内容を管理するソフトウェアを選びます。このソフトウェアをエンジンと呼びます。選べるのは、Valkey・Memcached・Redis OSSの3つです。どれも、キーと値の組をメモリに保存する仕組みです。

複製や多くのデータ型が必要ならValkeyかRedis OSS、単純さを優先するならMemcachedです。Memcachedはマルチスレッドで動き、コアの多い大きなノードを使えます。ノードを追加・削除して、台数を増減することもできます。

ValkeyとRedis OSSは、ほかのノードにデータを複製し、障害のときに自動で切り替えられます。ソート済みセットのような型を使うと、ゲームの順位表を作れます。ノードベースのValkeyの9.0以降では、データを複数のAZのログに残し、障害時にも失わない設定を選べます。

ノードベースのクラスタでのエンジンの違い(Amazon ElastiCache User Guideをもとに作成、2026年10月29日時点)
比べる点Valkey・Redis OSSMemcached
データの型文字列のほか、リスト・ハッシュ・ソート済みセットなど文字列などの単純な型
複製と自動の切り替えできるできない
マルチスレッドいいえはい
ノードベースでのバックアップできるできない

サーバーレスとノードベースのクラスタの違いは、容量を誰が決めるか

ElastiCacheの利用形態は2つあります。サーバーレスのキャッシュと、ノードベースのクラスタです。

サーバーレスは、名前を付けるだけで作れます。メモリや処理の使用量に応じて、AWSが自動で容量を増減します。データは3つのAZに保存され、可用性の保証は99.99%です。アクセス量を予測できない新しいアプリや、まず試したいときに向きます。

ノードベースは、ノードの種類と数、配置するAZを利用者が選びます。必要な容量を確保するのは、利用者の責任です。アクセス量をある程度予測でき、性能や費用を細かく管理したいときに向きます。

サーバーレスとノードベースのクラスタの違い(Amazon ElastiCache User Guideをもとに作成)
比べる点サーバーレスノードベースのクラスタ
作成の方法名前を付けるだけで1分以内に作れるノードの種類・数・配置するAZを選ぶ
容量使用量に合わせて自動で増減する利用者が必要な容量を見積もって決める
接続先1つのエンドポイントそれぞれのノード
料金保存したデータの量と、処理した要求の量ノードを動かした時間

使いどころと、DAX・CloudFrontのキャッシュとの違い

ElastiCacheの使いどころは、何度も読まれるデータをメモリから返し、データベースへの問い合わせを減らすことです。ログイン中の利用者の情報のように、短期間だけ保持すればよいデータの保存先にも使えます。セッションの情報とCookieの関係は、Cookieの記事で説明しています。

DynamoDBには、DAXという専用のキャッシュがあります。DAXはDynamoDBと同じAPIで使えます。DAXのクライアントが要求をDAXに送ります。キャッシュに無ければ、DAXがDynamoDBに要求を渡して、結果をキャッシュに入れます。ElastiCacheでは、キャッシュの読み書きとデータベースへの問い合わせの処理を、アプリに実装します。

CloudFrontもキャッシュを持ちますが、場所と内容が違います。CloudFrontは、利用者の近くのエッジロケーションで、HTTPの応答をキャッシュします。ElastiCacheは、アプリのそばで、データベースから読んだデータをキャッシュします。

料金の決まり方は、サーバーレスとノードベースで違う

2026年10月29日に料金ページで確認した、料金の決まり方は次のとおりです。料金体系には、オンデマンド・サーバーレス・Database Savings Plansがあります。金額は、リージョンやエンジンによって変わります。

  • サーバーレス:保存したデータの量を1時間ごとの平均で数え、処理した要求の量をECPUという単位で数えます。読み書きするデータ1KBごとに、1ECPUを数えます。
  • ノードベース:ノードを起動してから止めるまでの時間で数えます。1時間に満たない分も、1時間として数えます。
  • リザーブドノード:ノードベースで、1年か3年の利用を約束して割引を受けます。サーバーレスでは使えません。

エンジンによっても料金は変わります。サーバーレスのValkeyは、ほかのエンジンより33%安い料金です。課金の最低データ量も、ほかのエンジンの1GBに対して100MBです。ノードベースでは、ValkeyはRedis OSSより20%安い料金です。

参考にした資料

練習問題(全5問)

Q1Amazon ElastiCacheの説明として最も適切なものはどれ?
Q2遅延読み込み(キャッシュアサイド)で、キャッシュミスのときに起きることはどれ?
Q3書き込みスルーの説明として正しいものはどれ?
Q4キャッシュのキーにTTLを付けたとき、期限が切れたキーを読むとどうなる?
Q5DynamoDBの読み取りを、アプリのコードをほとんど変えずにマイクロ秒の速さにしたい。向くサービスはどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

AWSの記事を続けて読む

AWS 全38本中31本目