ElastiCache
AWS のマネージドインメモリキャッシュサービスで、Redis と Memcached をサポートする
AWSキャッシュ
ElastiCache とは
ElastiCache は、AWS のマネージドインメモリキャッシュサービスで、Redis と Memcached をサポートする。データベースの前段にキャッシュを配置し、読み取りレイテンシをミリ秒からマイクロ秒に短縮する。
Redis vs Memcached
| 観点 | Redis | Memcached |
|---|---|---|
| データ構造 | 文字列、リスト、セット、ハッシュ、ソート済みセット | 文字列のみ |
| 永続化 | あり (RDB, AOF) | なし |
| レプリケーション | あり (Multi-AZ) | なし |
| Pub/Sub | あり | なし |
| Lua スクリプト | あり | なし |
| 用途 | セッション、ランキング、キュー | 単純なキャッシュ |
ほとんどのケースで Redis を選択する。Memcached はマルチスレッドで単純なキャッシュに特化している。
キャッシュパターン
Cache-Aside (Lazy Loading)
async function getUser(id: string): Promise<User> {
const cached = await redis.get(`user:${id}`);
if (cached) return JSON.parse(cached); // キャッシュヒット
const user = await db.get({ TableName: 'users', Key: { id } });
await redis.set(`user:${id}`, JSON.stringify(user), 'EX', 3600); // 1時間 TTL
return user;
}
Write-Through
async function updateUser(id: string, data: Partial<User>): Promise<void> {
await db.update({ TableName: 'users', Key: { id }, ... });
await redis.set(`user:${id}`, JSON.stringify({ ...existing, ...data }), 'EX', 3600);
}
ElastiCache Serverless
ElastiCache Serverless は、キャパシティの自動スケーリングとノード管理が不要なモードだ。ECU (ElastiCache Processing Units) 単位で課金される。
Lambda からの接続
Lambda から ElastiCache に接続するには、同じ VPC 内に配置する必要がある。
DynamoDB DAX との比較
| 観点 | ElastiCache (Redis) | DynamoDB DAX |
|---|---|---|
| 対象 | 汎用キャッシュ | DynamoDB 専用 |
| API | Redis コマンド | DynamoDB 互換 |
| コード変更 | キャッシュロジックを自前実装 | エンドポイント変更のみ |
| データ構造 | 豊富 | DynamoDB アイテム |
よくある用途
| 用途 | Redis の機能 |
|---|---|
| セッション管理 | 文字列 + TTL |
| ランキング | ソート済みセット (ZADD, ZRANGE) |
| レート制限 | INCR + EXPIRE |
| リアルタイム通知 | Pub/Sub |
体系的に学ぶなら関連書籍を参照してほしい。