ElastiCache for Redis と Memcached は、AWS が提供するインメモリデータストアで、それぞれ異なるユースケースに適しています。
ElastiCache for Redis のユースケース
Redis は 永続化、Pub/Sub、高性能キャッシュ などの機能を持つため、以下のような用途で利用されます。
-
アプリケーションのキャッシュ
- データベースの負荷を軽減し、応答速度を向上させるために使用。
- 例: Rails や Node.js などの Web アプリケーションのセッションデータ、ページキャッシュ。
-
ランキング & リーダーボード
- Redis の Sorted Set を利用し、リアルタイムでスコアランキングを管理。
- 例: ゲームアプリのスコアランキング。
-
Pub/Sub を使ったリアルタイムメッセージング
- Redis の Pub/Sub 機能を利用して、リアルタイム通知やチャットシステムを構築。
- 例: SNS やゲームのイベント通知。
-
分散ロック
-
SETNX
(SET if Not Exists) を使って分散ロックを実装。 - 例: 複数サーバー間で同じリソースの同時更新を防ぐ。
-
-
キュー (Queue) システム
-
LPUSH
&RPOP
を使ってキューを実装し、非同期処理を管理。 - 例: バックグラウンドジョブ (Sidekiq, Resque など)。
-
-
セッションストア
- ショッピングサイトなどで、ログイン情報を Redis に保存。
- 例: Ruby on Rails + Devise のセッションストア。
Redis の構成図
ElastiCache for Memcached のユースケース
Memcached は 単純なキャッシュ に特化しており、スケールしやすいのが特徴。
-
データベースクエリの結果キャッシュ
- 高頻度でアクセスされるデータをキャッシュし、データベース負荷を軽減。
- 例: SQL の
SELECT
結果を Memcached に保存。
-
セッションストア
- アプリケーションのセッションデータを保存し、ステートレスな構成を実現。
- 例: PHP のセッション管理 (Redis でも可能だが、単純な用途なら Memcached でも OK)。
-
API レスポンスのキャッシュ
- 外部 API の結果をキャッシュし、リクエスト負荷を減らす。
- 例: 天気情報、ニュースフィードのキャッシュ。
-
オブジェクトキャッシュ
- アプリケーションの計算コストが高いデータをキャッシュ。
- 例: 計算済みのランキングデータ、JSON オブジェクト。
Memcached の構成図
Redis vs Memcached の選び方
比較項目 | Redis | Memcached |
---|---|---|
データ構造 | リスト, ハッシュ, セット, ソートセット など | シンプルな key-value |
ストレージ | ディスク永続化 (RDB, AOF) | 永続化なし (揮発性) |
スケーリング | クラスターによるスケールアウト | 水平方向にスケール可能 |
マルチスレッド | シングルスレッド (ただし高性能) | マルチスレッド |
TTL 設定 | 可能 | 可能 |
ユースケース | 高度なデータ処理、Pub/Sub、ランキング、ジョブキュー | 単純なキャッシュ用途 |
どのような構成で利用するか?
1. Webアプリのキャッシュ
-
構成:
- ElastiCache for Redis (シングルノード or マスター/スレーブ)
- Rails, Django, Node.js などのフレームワーク + Redis
-
用途:
- セッション管理 (
redis-session-store
) - ページキャッシュ
- API レスポンスのキャッシュ
- セッション管理 (
2. 高トラフィックな API のレスポンスキャッシュ
-
構成:
- ElastiCache for Memcached (複数ノードで分散)
- API サーバー (Lambda, EC2, Fargate)
-
用途:
- REST API / GraphQL のレスポンスキャッシュ
- DB クエリキャッシュ
3. リアルタイムデータ (チャット, ランキング, ジョブキュー)
-
構成:
- ElastiCache for Redis (クラスターモード)
- Pub/Sub, Sorted Set, List 機能を利用
-
用途:
- ランキングの管理
- メッセージのリアルタイム通知
- Sidekiq のジョブキュー管理