概要
Web アプリケーションでは、同じデータが何度も読み込まれることがよくあります。トップページに並ぶ人気商品の一覧や、ログイン中のユーザーのプロフィールなどです。そのたびにデータベースへ問い合わせていると、データベースの負荷が上がり、応答も遅くなります。
そこで、よく読まれるデータのコピーをメモリ上の「キャッシュ」に置いておき、次からはキャッシュから返す、という工夫をします。Amazon ElastiCache は、このキャッシュ(インメモリデータストア)のセットアップ・管理・スケーリングを AWS が引き受けるマネージドサービスです。エンジンには Valkey・Redis OSS・Memcached の 3 つを選べます。
この記事では、キャッシュの基本的な考え方(キャッシュアサイド・TTL・キャッシュヒット率)、3 つのエンジンの違い、サーバーレスキャッシュとノードベースのクラスターの違い、レプリケーションとマルチ AZ、DynamoDB Accelerator(DAX)や Amazon CloudFront との使い分けを押さえたうえで、最小構成の Valkey クラスターを作成し、同じ VPC の EC2 から valkey-cli で SET・GET・TTL を試します。
クラウドおさる今日は、よく使う物を手元の棚に置いておく仕組みを作るのでござる。猿山でも、毎朝食べるバナナまで山奥の倉庫へ取りに行っていたら、日が暮れてしまうのでござるな。


この記事のメリット
- キャッシュを置くと何が速くなり、どんなデータがキャッシュに向いているかを説明できる
- キャッシュアサイド(遅延読み込み)・書き込みスルー・TTL の考え方と、キャッシュヒット率の見方を理解できる
- Valkey・Redis OSS・Memcached の違い(データ型、レプリケーション、バックアップなど)を把握できる
- サーバーレスキャッシュとノードベースのクラスターの違いと、料金の決まり方を区別できる
- レプリケーションとマルチ AZ による自動フェイルオーバーの仕組みを理解できる
- ElastiCache・DAX・CloudFront を、キャッシュする場所と対象で使い分けられる
執筆者とキャラクター紹介
執筆者:土肥(とひ)
株式会社ジェニュインの代表であり元エンジニア。これまでオンプレミスと AWS 環境のインフラ業務を担当。AWS 認定資格の学習で得た知識を、ハンズオンとともに解説するのが得意。直近では新人の教育も行っており、これから技術を学ぶ方が納得できる解説を心がけています。基礎編・Cloud Practitioner の記事では、解説役としても登場します。


クラウドおさる



はじめましてでござる。弊猿はクラウドおさる。IT インフラが異常に発達した猿山から、雲に乗って地上の AWS を学びに降りてきたのでござる。



基礎編や Cloud Practitioner の記事では、とひさんに素朴な疑問をぶつける役でござるな。Security - Specialty などの記事では、要所でワンポイントや注意点をひとこと添えるでござる。



猿山にもデータセンターや監視当番があって、地上で起きることはだいたい猿山にも同じ仕組みがあるのでござる。例え話がつい猿山に寄るのは、弊猿の癖でござる。
技術解説
キャッシュとは何か



とひさん、「キャッシュを置くと速くなる」とよく聞くでござるが、そもそもキャッシュとは何でござるか?
よく使うデータのコピーを、取り出しやすい場所に置いておくことだよ。ElastiCache の場合、その置き場所はメモリなんだ。ディスクに保存するデータベースから毎回読むより、メモリから読むほうがずっと速いよね。ElastiCache のようなインメモリのキー値ストアは、データのコピーにミリ秒未満のレイテンシーでアクセスできることを目指しているんだ。



では、データは全部キャッシュに置けばよいのでござるか?
そこが考えどころなんだ。AWS のドキュメントでは、キャッシュに向いているかを考える観点として次のようなものが挙げられているよ。
| 観点 | 考えること |
|---|---|
| 速度とコスト | データベースから取り出すのに時間やコストがかかるデータほど、キャッシュの効果が大きい |
| データとアクセスパターン | 比較的変化が少なく、頻繁に読まれるデータ(例: ソーシャルメディアの個人プロフィール)が向いている |
| 古さ | キャッシュのデータは元のデータより古くなることがある。その遅れを許容できるか |



なるほど、毎朝みんなが食べるバナナは手元の棚に置き、たまにしか使わない長老会の古文書は倉庫に置いたまま、ということでござるな!
そうそう、その通り! もう一つ、「棚のバナナが倉庫の最新の状態とずれていてもいいか」も一緒に考えるのがポイントだよ。
キャッシュアサイドと書き込みスルー



キャッシュにはどうやってデータを入れるのでござるか?
代表的な戦略が 2 つあるよ。1 つ目は「遅延読み込み」で、キャッシュアサイドとも呼ばれるんだ。アプリケーションはまずキャッシュを見に行って、データがあればそれを使う。これがキャッシュヒット。なければ(キャッシュミス)データベースから読んで、その結果をキャッシュに書き込んでおくんだ。





必要になったものだけ棚に置くのでござるな。弱点はないのでござる?
いいところに気づいたね! キャッシュミスのときは「キャッシュ → データベース → キャッシュ」と 3 回の往復が発生するから、最初の 1 回は遅くなるんだ。それと、データベース側で更新があってもキャッシュには古いデータが残ることがあるよ。そこで 2 つ目の「書き込みスルー」。データベースに書き込むたびに、キャッシュも一緒に追加・更新する方法なんだ。
| 戦略 | 動き | 良い点 | 気をつける点 |
|---|---|---|---|
| 遅延読み込み(キャッシュアサイド) | 読み込み時にキャッシュを確認し、ミスしたらデータベースから読んでキャッシュに書く | 実際に読まれたデータだけがキャッシュに入る。キャッシュのノードが壊れても致命的ではない | キャッシュミスで 3 回の往復が発生する。データが古くなることがある |
| 書き込みスルー | データベースへの書き込みと同時にキャッシュも更新する | キャッシュのデータが古くならない | ほとんど読まれないデータまでキャッシュに入り、リソースを無駄にしやすい |
たとえば RDS の会員テーブルの前に ElastiCache を置くなら、「member:1 というキーで会員 1 番のデータを探し、なければ RDS に SELECT して、結果を member:1 に入れておく」というのが遅延読み込みのイメージだね。
TTL とキャッシュヒット率



キャッシュのデータが古くなるのは困るでござる。何か手はないのでござるか?
そこで使うのが TTL(Time To Live)だよ。キーが期限切れになるまでの秒数を、書き込むときに指定しておくんだ。期限が切れたキーは「見つからない」扱いになるから、アプリケーションはデータベースから読み直してくれる。遅延読み込みや書き込みスルーに TTL を組み合わせると、データが古くなりすぎるのを防げて、キャッシュが不要なデータであふれるのも避けられるんだ。



棚のバナナに「この日までに食べること」と札を付けておき、期限が来たら倉庫から新しいのを取ってくる、ということでござるな!
ははは、まさにそう! そしてキャッシュがどれくらい役に立っているかを見る指標が「キャッシュヒット率」だよ。ElastiCache(Valkey / Redis OSS)では CloudWatch の CacheHitRate メトリクスで確認できて、cache_hits / (cache_hits + cache_misses) で計算されるんだ。
| メトリクス | 意味 |
|---|---|
CacheHits | キーの読み取りに成功した数(キャッシュヒット) |
CacheMisses | キーの読み取りに失敗した数(キャッシュミス) |
CacheHitRate | cache_hits / (cache_hits + cache_misses) |
Evictions | メモリの上限(maxmemory)に達したために追い出されたキーの数 |
ドキュメントでは、この比率がおよそ 0.8 より小さい場合、かなりの量のキーが削除された・期限切れになった・そもそも存在しない、ということを意味すると説明されているよ。



棚を見に行って空振りばかりなら、棚の置き方を見直す合図でござるな。TTL を短くしすぎていないか、メモリが足りずに追い出されていないかを確かめるのでござる。
Valkey・Redis OSS・Memcached の違い



エンジンが 3 つもあって、どれを選べばよいか迷うでござる。
まず Valkey と Redis OSS の関係から話そうか。Valkey は Redis OSS から分かれたオープンソースプロジェクトで、Redis OSS 7.2 で使える機能は Valkey 7.2 以降でもそのまま使えるんだ。既存の ElastiCache for Redis OSS から Valkey にアップグレードすることもできるよ。コマンドも同じ感覚で使えるから、この 2 つは「近い仲間」と考えていいね。



では Memcached はどう違うのでござる?
Memcached は「シンプルで速いキャッシュ」に特化したエンジンなんだ。ノードベースのクラスターで比べると、こんな違いがあるよ。
| 項目 | Valkey / Redis OSS | Memcached |
|---|---|---|
| データ型 | 文字列・リスト・セット・ソート済みセット・ハッシュ・ビットマップなど | シンプル(文字列、オブジェクト) |
| レプリケーション(高可用性) | あり | なし |
| 自動フェイルオーバー | あり | なし |
| バックアップと復元 | あり | なし |
| Pub/Sub | あり | なし |
| マルチスレッド | なし | あり |
| 既定のポート | 6379 | 11211 |
ソート済みセットを使えばゲームのランキング(リーダーボード)も作れるし、Pub/Sub でメッセージのやり取りもできる。単なるキャッシュ以上のことをしたいなら Valkey / Redis OSS、とにかく単純なキャッシュをマルチスレッドで回したいなら Memcached、という選び方になるね。



品書きも番付もこなす Valkey と、バナナを右から左へ素早く渡すのが得意な Memcached、という違いでござるな! 今日は Valkey を使うのでござる?
そう、今日は Valkey でいこう。
サーバーレスとノードベースのクラスター



キャッシュを作るとき、サーバーレスというのも選べると聞いたでござる。
ElastiCache には 2 つのデプロイオプションがあるんだ。サーバーレスキャッシュは名前を付けるだけで作れて、容量の計画やノードの管理がいらない。メモリ・CPU・ネットワークの使用状況を見ながら自動でスケールしてくれて、データは複数の AZ に自動でレプリケートされるよ。もう一つのノードベースのクラスターは、ノードの種類・大きさ・数・AZ の配置を自分で決める方式だね。
| 項目 | サーバーレスキャッシュ | ノードベースのクラスター |
|---|---|---|
| 作り方 | 名前を付けるだけ。容量の計画が不要 | ノードタイプ・ノード数・シャード数・AZ 配置を選ぶ |
| スケーリング | 自動(垂直・水平) | 手動でノードサイズやシャード・レプリカを変更。Auto Scaling も設定できる |
| 可用性 | 複数 AZ に自動でレプリケート | シングル AZ か、レプリカを置いてマルチ AZ にするかを選ぶ |
| 転送中の暗号化 | 常に有効(TLS 対応のクライアントが必要) | 作成時に選ぶ |
| 料金の決まり方 | 保存したデータ量(GB 時間)と処理量(ECPU) | ノードごとの時間単位 |



ECPU とは何でござるか?
ElastiCache Processing Units の略で、vCPU の時間と転送データ量の両方を含む単位なんだ。単純な読み書きなら、転送データ 1 KB につき 1 ECPU だよ。それと、サーバーレスキャッシュは保存データが最低 1 GB として計量されるんだ。



サーバーレスは、ほとんど何も入れていなくても 1 GB 分のデータ保存料金が時間ごとにかかるのでござる。ちょっと試すだけなら、東京リージョンの料金ページを見比べたうえで、小さなノード 1 台のクラスターのほうがバナナの減りが少なくて済むのでござるな。
そういうこと。今回のハンズオンは、ノードベースのクラスターを最小のノード 1 台で作るよ。
レプリケーションとマルチ AZ



ノード 1 台だと、そのノードが壊れたらキャッシュは空っぽでござるか?
そうなるね。そこで Valkey / Redis OSS ではレプリケーショングループを使うんだ。読み書きできるプライマリノード 1 個と、読み取り専用のリードレプリカ 1〜5 個をまとめたものだよ。プライマリのデータはレプリカへ非同期でコピーされて、読み取りをレプリカに振り分けることもできるんだ。



プライマリが倒れたら、どうなるのでござる?
マルチ AZ を有効にしておけば、レプリケーションの遅延が最も小さいリードレプリカが自動でプライマリに昇格するよ。昇格は通常数秒で終わって、アプリケーションがプライマリエンドポイントに書き込んでいるなら、接続先を変える必要もないんだ。ただし、マルチ AZ を有効にするにはリードレプリカが 1 つ以上必要で、Memcached では使えないよ。





見張り台を 2 つの峰に置いておき、片方が崩れたらもう片方が本番の見張り台になるのでござるな。合図の旗の場所(エンドポイント)は変わらないから、猿たちは迷わないのでござる!
うまいね! 今回は料金を抑えるためにレプリカなし・マルチ AZ なしで作るけど、本番ではレプリカとマルチ AZ をセットで考えるのが基本だよ。
DAX・CloudFront との使い分け



AWS には他にもキャッシュのサービスがあると聞いたでござる。DAX や CloudFront とはどう違うのでござるか?
どれもキャッシュだけど、「どこに置いて、何をキャッシュするか」が違うんだ。DynamoDB Accelerator(DAX)は DynamoDB 専用のインメモリキャッシュで、DynamoDB と API の互換性があるから、既存のアプリケーションは最小限の変更で使えるよ。結果整合性のある読み込みの応答時間を、1 桁ミリ秒からマイクロ秒単位にまで短くできるんだ。CloudFront は世界中のエッジロケーションで、HTML・CSS・JavaScript・画像などのウェブコンテンツをキャッシュして配信するサービスだね。
| サービス | キャッシュする場所 | 主な対象 | 向いている場面 |
|---|---|---|---|
| ElastiCache | VPC 内(アプリケーションの近く) | アプリケーションが自由に決めたキーと値(RDS のクエリ結果、セッション、ランキングなど) | データベースの種類を問わず、アプリケーション側でキャッシュを制御したい |
| DAX | アプリケーションと DynamoDB の間 | DynamoDB の読み込み結果 | DynamoDB の読み込みを、アプリケーションの変更を最小限にして速くしたい |
| CloudFront | 世界中のエッジロケーション | ウェブコンテンツ(静的・動的) | 利用者に近い場所からコンテンツを配信したい |



麓の茶屋に置く土産物が CloudFront、蔵の前に置く DynamoDB 専用の棚が DAX、どの蔵の品でも置ける手元の棚が ElastiCache、という分け方でござるな!
そうそう、その整理でばっちり! 1 つのシステムで組み合わせて使うことも多いよ。では実際に、Valkey のクラスターを作って手を動かしてみよう。
実践
プライベートサブネットにノード 1 台の Valkey クラスター(クラスターモード無効、レプリカなし、転送中の暗号化あり)を作成し、同じ VPC のパブリックサブネットにある EC2 から valkey-cli で接続して、SET・GET・TTL とキャッシュヒット・ミスの数を確認します。キャッシュ用のセキュリティグループとサブネットグループも手順の中で作成します。
前提条件
- リージョン:
ap-northeast-1(東京) - AWS マネジメントコンソールにログイン済みで、IAM ユーザーまたはロールに ElastiCache・EC2・Systems Manager の操作権限があること
- 以下のリソースが作成済みであること
| リソース種別 | リソース名 | 内容 |
|---|---|---|
| VPC | elasticache-vpc | CIDR 10.0.0.0/16 |
| パブリックサブネット | elasticache-public-subnet-1a | 10.0.1.0/24(ap-northeast-1a)。インターネットゲートウェイへのルートあり |
| プライベートサブネット | elasticache-private-subnet-1a / elasticache-private-subnet-1c | 10.0.11.0/24(ap-northeast-1a)/ 10.0.12.0/24(ap-northeast-1c)。インターネットへのルートなし |
| セキュリティグループ | elasticache-client-sg | クライアント EC2 用。インバウンドルールなし |
| EC2 インスタンス | elasticache-client | Amazon Linux 2023。elasticache-public-subnet-1a に配置し、elasticache-client-sg を付与。valkey-cli を含む valkey パッケージをインストール済み。AmazonSSMManagedInstanceCore を含むインスタンスプロファイルが付与され、Session Manager で接続できる状態 |
VPC とサブネットの考え方は Amazon VPC で仮想ネットワークを構築しサブネットを設定する、EC2 の基本は Amazon EC2 でインスタンスを起動しSSH接続する、セキュリティグループの考え方は セキュリティグループとネットワーク ACL でアクセスを制御する を参照してください。
作成するリソース一覧
| リソース種別 | リソース名 | 用途 |
|---|---|---|
| セキュリティグループ | elasticache-cache-sg | キャッシュ用。elasticache-client-sg からの TCP 6379 のみ許可 |
| ElastiCache サブネットグループ | elasticache-handson-subnet-group | キャッシュを置くプライベートサブネット 2 つ(2 AZ)のセット |
| ElastiCache クラスター(Valkey) | elasticache-handson-valkey | ノードベース、クラスターモード無効、cache.t4g.micro 1 台(レプリカなし) |
キャッシュ用のセキュリティグループを作成する
- AWS マネジメントコンソールにログインし、リージョンが
ap-northeast-1(東京)であることを確認します - 上部の検索バーに
EC2と入力し、表示された「EC2」を選択します - 左側ナビゲーションの「ネットワーク & セキュリティ」→「セキュリティグループ」を選択します
- 右上の「セキュリティグループを作成」をクリックします
- 「基本的な詳細」で以下を入力します
- セキュリティグループ名:
elasticache-cache-sg - 説明:
Security group for elasticache-handson-valkey - VPC:
elasticache-vpc - 「インバウンドルール」セクションで「ルールを追加」をクリックし、以下を入力します
- タイプ:
カスタム TCP - ポート範囲:
6379 - ソース:
カスタムのまま、右の検索ボックスにelasticache-client-sgと入力して候補から選択(選択するとsg-で始まる ID が表示されます) - 「アウトバウンドルール」はデフォルトのままにします
- ページ下部の「セキュリティグループを作成」をクリックします


サブネットグループを作成する
- 上部の検索バーに
ElastiCacheと入力し、表示された「ElastiCache」を選択します - 左側ナビゲーションの「設定」→「サブネットグループ」を選択します
- 「サブネットグループを作成」をクリックします
- 「サブネットグループの設定」で以下を入力します
- 名前:
elasticache-handson-subnet-group - 説明:
Private subnets for elasticache-handson-valkey - VPC ID: 初期表示は別の VPC なので、選択欄から
elasticache-vpcの VPC ID(vpc-xxxx (elasticache-vpc)形式)を選び直す - VPC を選び直すと「選択済みのサブネット」に VPC 内のサブネットがすべて表示されるので、「管理」をクリックし、
elasticache-private-subnet-1a(10.0.11.0/24)とelasticache-private-subnet-1c(10.0.12.0/24)の 2 つだけにチェックを入れて「選択」をクリックします - 「作成」をクリックします


サブネットグループの一覧に elasticache-handson-subnet-group が表示されることを確認します。
Valkey クラスターを作成する
設定項目が多いため、ここで指定する項目以外はすべてデフォルトのままにします。
- 左側ナビゲーションの「Valkey キャッシュ」を選択し、「Valkey キャッシュを作成」をクリックします
- 「モード」が
Valkeyであることを確認し、「デプロイオプション」でノードベースのキャッシュを選択します(初期値はサーバーレスです) - 「作成方法」で
クラスターキャッシュを選択します(初期値は簡単な作成です) - 「クラスターモード」で
無効を選択します - 「クラスター情報」の「名前」に
elasticache-handson-valkeyと入力します - 「ロケーション」で
AWS クラウドを選択し、「マルチ AZ」の「有効化」のチェックを外します


続けて、同じ画面の「キャッシュ設定」と「接続性」を設定します。
- 「キャッシュ設定」で以下を設定します
- エンジンバージョン: デフォルトのまま
- ポート:
6379(デフォルト) - ノードのタイプ: 選択欄を開いて
cache.t4g.microを検索して選択(初期値はcache.r8g.largeです) - レプリケーション数:
0(初期値は2です)。0にすると、「マルチ AZ」と「自動フェイルオーバー」は選択できない状態になります - 「接続性」で以下を設定します
- ネットワークタイプ:
IPv4(デフォルト) - サブネットグループ:
既存のサブネットグループを選択を選び、elasticache-handson-subnet-groupを選択(このアカウントでは作成済みのサブネットグループが 1 つだけなので、最初から選ばれています) - 「アベイラビリティーゾーンの配置」は
指定がありません(デフォルト)のままにします - 「次へ」をクリックします


「詳細設定」の画面で、セキュリティとバックアップを設定します。
- 「セキュリティ」で以下を設定します
- 保管時の暗号化: デフォルト(有効)のまま
- 転送中の暗号化:
有効化にチェックが入っていることを確認します - アクセスコントロール:
アクセスコントロールがありません(デフォルト) - 「選択済みのセキュリティグループ」で「管理」をクリックし、
elasticache-cache-sgにチェックを入れて「選択」をクリックします(初期状態ではどのセキュリティグループも選ばれていません) - 「バックアップ」で「自動バックアップを有効化」のチェックを外します
- その他の項目はデフォルトのままにし、「次へ」をクリックします


- 確認画面で設定内容を確認し、ページ下部の「作成」をクリックします
Valkey キャッシュの一覧に elasticache-handson-valkey が表示されます。作成には 10 分以上かかります。ステータスが Creating から Available になるまで待ちます。
elasticache-handson-valkeyの名前をクリックし、詳細画面を開きます- 「クラスターの詳細」の「プライマリエンドポイント」(
master.elasticache-handson-valkey.xxxxxx.apne1.cache.amazonaws.com:6379のような形式)をコピーして控えます - 「転送中の暗号化」が有効になっていることを確認します





ノードベースのクラスターは、使っていなくてもAvailable になった時点から 1 時間単位でノードの料金がかかり続けるのでござる。止めておく機能はないので、試し終わったらクラスターを削除するのを忘れぬようにするのでござるぞ。
EC2 から Valkey に接続して SET・GET・TTL を試す
- 上部の検索バーに
EC2と入力し、表示された「EC2」を選択します - 左側ナビゲーションの「インスタンス」を選択し、
elasticache-clientを選択して「接続」をクリックします - 「ウェブブラウザで」タブの「接続方法を選択」で
SSM セッションマネージャーを選択し、右下の「接続」をクリックします - ブラウザ上にターミナルが開いたら、控えたプライマリエンドポイントのホスト名部分(末尾の
:6379を除いたもの)を変数に入れ、名前解決します
EP=<プライマリエンドポイントのホスト名>
getent hosts $EP10.0.11.x または 10.0.12.x のプライベート IP アドレスが返り、キャッシュがプライベートサブネットにあることが確認できます。
valkey-cliで接続します。転送中の暗号化を有効にしたので--tlsを付けます
valkey-cli -h $EP --tls -p 6379PINGを実行し、PONGが返ることを確認します
PING- 会員 1 番のデータをキャッシュに書き込んで、読み出してみます。キャッシュアサイドで「RDS から読んだ結果をキャッシュに入れた」状態をイメージした操作です
SET member:1 "cloud-osaru"
GET member:1SET に OK、GET に "cloud-osaru" が返ります。これがキャッシュヒットです。
- 次に、30 秒で期限切れになるキーを書き込み、
TTLで残り秒数を確認します
SET session:osaru "banana" EX 30
TTL session:osaruTTL を実行するたびに、30 から減っていく残り秒数が返ります。
- 30 秒以上待ってから、同じキーを読み出します
GET session:osaru(nil) が返り、期限が切れたキーは「見つからない」扱いになったことが確認できます。アプリケーションであれば、ここでデータベースから読み直してキャッシュに入れ直します(キャッシュミス)。


exitと入力してvalkey-cliを終了します
キャッシュヒットとキャッシュミスの数を確認する
CacheHits・CacheMisses メトリクスの元になっている統計(keyspace_hits・keyspace_misses)は、INFO コマンドで直接見ることができます。
- 同じターミナルで、以下を実行します
valkey-cli -h $EP --tls -p 6379 INFO stats | grep keyspacekeyspace_hits と keyspace_misses が表示されます。先ほどの GET member:1 と、キーが存在している間に実行した TTL(2 回)が成功した読み取りとして keyspace_hits に、期限切れ後の GET session:osaru が失敗した読み取りとして keyspace_misses に数えられています(検証では keyspace_hits が 3、keyspace_misses が 1 でした)。GET 以外でも、存在するキーを参照するコマンドはヒットに数えられます。
- ヒット・ミスが増えることを確かめるため、存在するキーと存在しないキーを 1 回ずつ読み出してから、もう一度統計を表示します
valkey-cli -h $EP --tls -p 6379 GET member:1
valkey-cli -h $EP --tls -p 6379 GET member:2
valkey-cli -h $EP --tls -p 6379 INFO stats | grep keyspacekeyspace_hits と keyspace_misses がそれぞれ 1 ずつ増えていることが確認できます。





キャッシュにはパブリック IP もインターネットへの道もないのに、腕章(elasticache-client-sg)を付けた EC2 からだけは話しかけられたのでござる。棚を見に行って当たった数と空振りした数も数えられるので、棚の置き方の良し悪しを数字で確かめられるのでござるな。
まとめ
- Amazon ElastiCache は、Valkey・Redis OSS・Memcached を使うインメモリのキャッシュ・データストアを、AWS がセットアップ・管理・スケーリングしてくれるマネージドサービスである
- 遅延読み込み(キャッシュアサイド)は読み込み時にミスしたデータだけをキャッシュに入れ、書き込みスルーはデータベースへの書き込み時にキャッシュも更新する。TTL を組み合わせると、データが古くなりすぎるのを防げる
- キャッシュヒット率は
cache_hits / (cache_hits + cache_misses)で、CloudWatch のCacheHitRateで確認できる - Valkey / Redis OSS は多彩なデータ型・レプリケーション・バックアップを持ち、Memcached はシンプルなデータ型とマルチスレッドが特徴である
- サーバーレスキャッシュは容量の計画が不要で、保存データ量(最低 1 GB として計量)と ECPU で課金される。ノードベースのクラスターはノードの種類・数・配置を自分で決め、ノード時間で課金される
- Valkey / Redis OSS のレプリケーショングループはプライマリ 1 個とリードレプリカ 1〜5 個で構成され、マルチ AZ を有効にするとプライマリ障害時にレプリカが自動で昇格する(レプリカ 1 個以上が必要)
- ElastiCache はアプリケーションが制御する汎用のキャッシュ、DAX は DynamoDB 専用のキャッシュ、CloudFront はエッジロケーションでウェブコンテンツをキャッシュするサービスとして使い分ける
参照先
- Amazon ElastiCache とは
- ElastiCache の仕組み
- ElastiCache の一般的なユースケースおよび ElastiCache がどのように役立つか
- Memcached のキャッシュ戦略
- Valkey と Redis OSS のメトリクス
- Valkey、Memcached、および Redis OSS のノードベースのクラスターの比較
- ElastiCache でのエンジンバージョンとアップグレード
- レプリケーショングループを使用する高可用性
- Valkey および Redis OSS でマルチ AZ を使用して ElastiCache のダウンタイムを最小限に抑える
- Valkey または Redis OSS 用のクラスターの作成
- サブネットグループの作成
- Amazon VPC の ElastiCache キャッシュにアクセスするためのアクセスパターン
- ElastiCache の転送時の暗号化 (TLS)
- valkey-cli を使用した送信中の暗号化による ElastiCache (Valkey) または Amazon ElastiCache for Redis OSS への接続
- キャッシュへのデータの読み取りと書き込み
- DynamoDB Accelerator (DAX) とインメモリアクセラレーション
- Amazon CloudFront とは何ですか?
- ステップ 1: Session Manager の前提条件を満たす













