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

体系的に学ぶなら関連書籍を参照してほしい。

関連用語