0Pricing
Cloud & IT Cert Prep · レッスン

RedisとMemcached:適切なエンジンの選択

Redis(永続化、レプリケーション、ソート済みセット、Pub/Sub)とMemcached(シンプルさ、マルチスレッド)を比較し、ユースケースの要件に基づいて選択します。

「RedisとMemcached:適切なエンジンの選択」はCoddyKit上の無料Cloud & IT Cert Prepレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCloud & IT Cert Prep学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

Amazon ElastiCache とは

Amazon ElastiCacheは、一般的なオープンソースのインメモリデータストアをクラウド上で簡単にデプロイ、管理、スケーリングできる、フルマネージドのインメモリキャッシュサービスです。2 つのエンジン、RedisとMemcachedをサポートしています。頻繁に要求されるデータをデータベースではなくメモリから提供することで、ElastiCache はデータベースの負荷を桁違いに削減し、応答レイテンシーをミリ秒からマイクロ秒へ短縮できます。Redis と Memcached のどちらを選ぶかは、SAA-C03 でよく出題される問題です。

Memcached:シンプルさを追求

Memcachedは、シンプルさと水平方向のスケーラビリティに重点を置いた、分散インメモリ key-value ストアです。主な特徴は、マルチスレッド(1 つのノードですべての CPU コアを使用可能)、シンプルな key-value ストレージ(文字列のみで、複雑なデータ構造は不可)、永続化なし(ノードの再起動時にデータが失われる)、レプリケーションなし(スタンバイやレプリカなし)、そしてクライアント側のコンシステントハッシュによる水平方向のシャーディングです。永続化、複雑なデータ型、高可用性が不要で、シンプルかつ大規模なキャッシュが必要な場合は、Memcached が適しています。

# Create a Memcached cluster with 3 nodes
aws elasticache create-cache-cluster \
  --cache-cluster-id my-memcached \
  --engine memcached \
  --cache-node-type cache.r7g.large \
  --num-cache-nodes 3 \
  --cache-subnet-group-name my-subnet-group

# Memcached auto-discovers nodes via the config endpoint
# Application connects to: my-memcached.cfg.use1.cache.amazonaws.com:11211

Redis:高機能なインメモリストア

Redis(Remote Dictionary Server)は、インスタンス単位ではシングルスレッドで動作する、高機能なインメモリデータ構造ストアです。文字列、ハッシュ、リスト、セット、ソート済みセット、ビットマップ、HyperLogLog、ストリーム、地理空間インデックスをサポートしています。Memcached と比較した主な利点は、任意で選択できる永続化(AOF と RDB スナップショット)、レプリケーション(リードレプリカと自動フェイルオーバー)、pub/sub メッセージング、Lua スクリプティング、トランザクション(MULTI/EXEC)、そして水平方向のシャーディングを実現するCluster Modeです。実際の多くのキャッシュ用途では、Redis が適しています。

# Redis data structure examples

# String
# SET user:1:name 'Alice'
# GET user:1:name

# Hash (object-like)
# HSET product:42 name 'Widget' price '9.99' stock '100'
# HGETALL product:42

# Sorted set (leaderboard)
# ZADD leaderboard 9500 'alice' 8700 'bob' 9100 'carol'
# ZREVRANGE leaderboard 0 2 WITHSCORES

# Pub/Sub
# PUBLISH notifications 'order_shipped:12345'
# SUBSCRIBE notifications

Redis の永続化:AOF と RDB

Redis は 2 つの永続化メカニズムをサポートしています。RDB(Redis Database)は、設定可能な間隔でディスクに保存する定期的なポイントインタイムスナップショットです(再起動は高速ですが、スナップショット間のデータが失われる可能性があります)。AOF(Append-Only File)は、すべての書き込み操作を記録します。再起動時に Redis がログを再生して状態を再構築するため、ファイルサイズが大きくなり再起動も遅くなる一方で、耐久性が向上します。ElastiCache では、ノードの再起動後もデータを保持するために AOF を有効にできます。これは、ElastiCache を単なるキャッシュではなく、セッションデータなどのプライマリデータストアとして使用する場合に重要です。

# Create an ElastiCache Redis cluster with AOF enabled
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --replication-group-description 'Redis with persistence' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --num-cache-clusters 2 \
  --cache-parameter-group-name default.redis7 \
  --snapshot-retention-limit 5

# Note: Enable AOF via parameter group: appendonly=yes

Redis のレプリケーションと自動フェイルオーバー

Redis は、すべての書き込みを処理する 1 つのプライマリノードと、読み取りを処理する最大 5 つのリードレプリカで構成されるレプリケーショングループをサポートしています。Multi-AZ と自動フェイルオーバーを有効にすると、プライマリに障害が発生した際、ElastiCache はリードレプリカを自動的にプライマリへ昇格します。通常、フェイルオーバーは 60 秒未満で完了します。これにより、Memcached(レプリケーションなし)では実現できない高可用性を、Redis を利用するアプリケーションに提供できます。HA が必要な本番アプリケーションのキャッシュには、必ず自動フェイルオーバーを有効にした Redis を使用してください。

# Create a Redis replication group with Multi-AZ failover
aws elasticache create-replication-group \
  --replication-group-id prod-redis \
  --description 'Production Redis with HA' \
  --cache-node-type cache.r7g.xlarge \
  --engine redis \
  --multi-az-enabled \
  --automatic-failover-enabled \
  --num-cache-clusters 3 \
  --cache-subnet-group-name multi-az-subnet-group

# 1 primary + 2 replicas across 3 AZs

リーダーボードに使う Redis のソート済みセット

ソート済みセットは、Redis で最も強力なデータ構造の 1 つです。各メンバーには浮動小数点数のスコアが関連付けられ、メンバーは常にソートされた状態で保持されます。そのため、ソート済みセットはリーダーボード(スコア順のランキング)、優先度付きキュー(優先度の高いジョブから処理)、レート制限(タイムスタンプをスコアにしたスライディングウィンドウ)に適しています。ZADD、ZRANGE、ZREVRANGE、ZRANK、ZRANGEBYSCORE の各操作はすべて O(log n) であり、数百万件のエントリに対しても非常に効率的です。

# Leaderboard operations using Redis sorted sets

# Add/update scores
# ZADD game:leaderboard 10500 'player:alice'
# ZADD game:leaderboard 9800  'player:bob'
# ZADD game:leaderboard 11200 'player:carol'

# Get top 3 players (highest scores first)
# ZREVRANGE game:leaderboard 0 2 WITHSCORES
# Result: carol 11200, alice 10500, bob 9800

# Get a player's rank (0-indexed)
# ZREVRANK game:leaderboard 'player:alice'
# Result: 1 (second place)

メッセージングに使う Redis Pub/Sub

Redis のpub/subを使うと、パブリッシャーは購読者を把握していなくても、チャネルにメッセージをブロードキャストできます。購読者は、購読しているチャネルに発行されたすべてのメッセージをリアルタイムで受信します。Pub/sub メッセージは永続化されないため、購読者がオフラインの場合、そのメッセージは失われます。確実な配信を伴う永続的なメッセージングには、Redis Streams(Redis 5 で追加された、より堅牢なデータ構造)や、SQS、SNS などの専用メッセージングサービスを使用してください。SAA-C03 では、Redis pub/sub はサービス間の軽量なリアルタイム通知に使える選択肢です。

# Publisher side (broadcasts to 'notifications' channel)
# PUBLISH notifications '{"type":"order_shipped","orderId":"12345"}'

# Subscriber side (listens for messages)
# SUBSCRIBE notifications

# Pattern subscribe (wildcard channel matching)
# PSUBSCRIBE order:*
# Receives messages from: order:created, order:shipped, order:delivered

# Note: Unlike SQS, pub/sub is fire-and-forget — no acknowledgement

Memcached と Redis:選択表

SAA-C03 では、次の基準で選択してください。次の要件がある場合はMemcachedを選びます:HA が不要なシンプルなキャッシュ、マルチスレッドのパフォーマンス、ノード追加による水平方向のスケーリング(純粋なキャッシュ)。次の要件がある場合はRedisを選びます:永続化(セッションストア)、レプリケーションとフェイルオーバー(HA)、複雑なデータ型(リーダーボード用のソート済みセット、セット、リスト)、pub/sub、Lua トランザクション、複数シャードでの水平方向のスケーリングを実現するCluster Mode。試験問題に単純な key-value キャッシュを超える機能が 1 つでも登場した場合、ほぼ必ず Redis が答えです。

キャッシュノードのタイプとファミリー

ElastiCache では、複数のノードタイプファミリーを利用できます。r7g(Graviton 3、メモリ最適化。価格性能比が最も高く、ほとんどのキャッシュに推奨)、m7g(コンピューティングとメモリのバランス型)、t4g(バースト可能で、開発・テスト向けの低コストタイプ)です。ノードサイズは cache.t4g.micro(500 MB)から cache.r7g.16xlarge(425 GB)まであります。本番環境では、データセットをメモリに収めたうえで 20~25% の余裕を確保できるノードサイズを選択してください。メモリが不足すると、Memcached ではエビクションが発生し、Redis では OOM エラーが発生します。

# Get available cache node types
aws elasticache describe-cache-engine-versions \
  --engine redis \
  --query 'CacheEngineVersions[?contains(EngineVersion, '7')].{Engine:Engine,Version:EngineVersion}'

# Check memory and vCPU for a node type
aws elasticache describe-cache-engine-versions \
  --cache-parameter-group-family redis7

# Monitor evictions to detect memory pressure
# CloudWatch: Evictions metric > 0 means cache is full

ElastiCache のセキュリティ

ElastiCache は VPC 内にデプロイされ、セキュリティグループによってアクセスを制御します。デフォルトではパブリックインターネットからアクセスできません。Redis では、AUTH トークン(クライアントが提示する必要のあるパスワード)と、接続用の転送中の暗号化(TLS)を有効にし、さらに KMS を使用した保管時の暗号化も有効にしてください。Memcached で利用できるのは転送中の TLS のみで、保管時の暗号化や AUTH は利用できません。暗号化されていない Redis から暗号化された Redis への移行では、インプレース移行はできません。新しい暗号化クラスターを作成し、データをウォームアップする必要があります。

# Create a Redis cluster with TLS and AUTH token
aws elasticache create-replication-group \
  --replication-group-id secure-redis \
  --description 'Encrypted Redis' \
  --cache-node-type cache.r7g.large \
  --engine redis \
  --transit-encryption-enabled \
  --at-rest-encryption-enabled \
  --auth-token 'MySecretPassword123!'

# Store the AUTH token in Secrets Manager, not in your app code

エビクションポリシー

Redis または Memcached のキャッシュが満杯になったとき、エビクションポリシーによって空き容量を確保するために削除するキーが決まります。Redis の一般的なエビクションポリシーには、noeviction(OOM エラーを返す。キャッシュをプライマリストアとして使用する場合に適しています)、allkeys-lru(すべてのキーから最も最近使用されていないキーを削除。一般的なキャッシュに適しています)、volatile-lru(TTL が設定されたキーの中から LRU 方式で削除。期限切れにならないキーを保持します)、allkeys-random(ランダムに削除)、allkeys-lfu(使用頻度が最も低いキーを削除)があります。一般的なキャッシュ用途では、allkeys-lruまたはallkeys-lfuが推奨されます。

# Set eviction policy via parameter group
aws elasticache create-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --cache-parameter-group-family redis7 \
  --description 'LRU eviction policy'

aws elasticache modify-cache-parameter-group \
  --cache-parameter-group-name redis7-lru \
  --parameter-name-values ParameterName=maxmemory-policy,ParameterValue=allkeys-lru

# Apply the parameter group to your cluster:
aws elasticache modify-replication-group \
  --replication-group-id prod-redis \
  --cache-parameter-group-name redis7-lru

クイックチェック

このレッスンで学んだ AWS Solutions Architect(SAA-C03)の概念について、理解度を確認しましょう。

レッスンのまとめ

このレッスンでは、Memcached はシンプルでマルチスレッドですが、HA がないため、単純なキャッシュを水平方向にスケーリングする用途に最適であること、Redis は複雑なデータ構造、永続化、pub/sub、Multi-AZ フェイルオーバーをサポートするため、ほとんどの本番キャッシュ用途に最適であること、そしてソート済みセットにより、Redis はリーダーボードや優先度付きキューに自然に適していることを学びました。次は、Redis のレプリケーショングループと水平方向のシャーディングを実現する Cluster Mode について説明します。

よくある質問

「RedisとMemcached:適切なエンジンの選択」レッスンは無料ですか?

はい。「RedisとMemcached:適切なエンジンの選択」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cloud & IT Cert Prepコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cloud & IT Cert Prepコースには全4レッスンが含まれています。

「RedisとMemcached:適切なエンジンの選択」で何を学びますか?

Redis(永続化、レプリケーション、ソート済みセット、Pub/Sub)とMemcached(シンプルさ、マルチスレッド)を比較し、ユースケースの要件に基づいて選択します。 ブラウザで直接実行するハンズオンコードでCloud & IT Cert Prepを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cloud & IT Cert Prepを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCloud & IT Cert Prepは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「RedisとMemcached:適切なエンジンの選択」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCloud & IT Cert Prepレッスンでコードを書いて実行できますか?

はい。すべてのCloud & IT Cert Prepレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. RedisとMemcached:適切なエンジンの選択
  2. ElastiCache Redisのレプリケーショングループとクラスター​​モード
  3. キャッシュ戦略:レイジーローディングとライトスルー
  4. セッションストレージとリーダーボードのパターン
← Cloud & IT Cert Prepに戻る