Amazon ElastiCache for Valkey 実践ガイド:構築からゲーム向けリアルタイムランキング運用まで
はじめに
近年、Web アプリケーションやオンラインゲームをはじめとする各種サービスでは、従来のリレーショナルデータベースのみでは対応しきれないリアルタイム性やスケーラビリティが求められる場面が増えています。その中で、インメモリ型データストアである Redis は、非常に高いパフォーマンスと柔軟なデータ構造を備えたソリューションとして広く利用されてきました。 2024 年、Redis OSS のライセンス変更を契機として、オープンソースコミュニティ主導で Valkey が誕生し、AWS もこれを公式にサポートしています。本記事では、ElastiCache for Valkey を用いた最新の実装手法とその効果的な活用事例を中心に解説します。
対象読者
- AWS およびインメモリデータストアに興味のあるエンジニア
- Redis から Valkey への移行や最新クラウド構成に関心のある方
- ゲームや Web サービスのリアルタイム機能を強化したいシステム担当者
想定されるユースケース
- 大量同時アクセス時にも遅延なくスコアやランキングを表示したい
- ログインセッションや一時データの高速な管理・参照を行いたい
- データベースのパフォーマンスボトルネックを解消し、全体のレスポンスを向上させたい
ElastiCache for Valkey とは
2024 年以降、Amazon ElastiCache では従来の「Redis OSS」に加え、新たに「Valkey」が正式サポートされるようになりました。Valkey は Redis OSS 7.0 互換のオープンソース・インメモリデータストアであり、API・コマンド体系・クライアントライブラリも Redis OSS と同様に利用可能です。Valkey はオープンソースコミュニティによる継続的な開発体制と、クラウド運用に最適化されたコスト構造を特徴としており、AWS 公式も今後のクラウド・インメモリデータストアの主軸として Valkey の利用を推奨しています。
参考:
- https://aws.amazon.com/jp/blogs/news/get-started-with-amazon-elasticache-for-valkey/
- https://valkey.io/
Redis とは
Redis は、インメモリ型の NoSQL データストアです。すべてのデータをメモリ上に保持することで、きわめて高速なデータ読み書きが可能です。一般的なリレーショナルデータベース(例:MySQL や PostgreSQL)がディスクを主な保存先とするのに対し、Redis は揮発性メモリを利用しているため、レイテンシの非常に低いシステムを構築できます。Redis はキー・バリュー型のデータストアとしてだけでなく、リスト・セット・ソート済みセット(ZSET)など、多様なデータ構造をサポートしており、この柔軟性によってさまざまなアプリケーションの要件に対応できます。
参考:
Redis は、その高速性と一時的なデータ管理能力から、以下のようなユースケースで広く利用されています。
-
セッション管理
ユーザーのログイン状態や一時的なアプリケーションデータの保存に利用されます。これにより、大規模な同時接続にも対応可能となります。 -
キャッシュ
データベースへのアクセス頻度が高いデータを一時的に Redis に格納し、システム全体のレスポンスを向上させる用途です。 -
ランキング集計
ゲームなどのリアルタイム性が求められる場面では、プレイヤーのスコアランキングをソート済みセット(ZSET)で効率的に管理できます。 -
レートリミット(アクセス制御)
一定時間内のアクセス回数をカウントし、不正アクセスや過剰なリクエストを防ぐ用途に用いられます。 -
Pub/Sub(メッセージ配信)
サーバー間でリアルタイムにメッセージを通知するシステムでも利用可能です。
ゲーム開発の現場において、Redis は下記のような場面で採用されています。
-
リアルタイムランキングの集計・表示
- 多数のプレイヤーによるスコア登録、即時のランキング表示といった用途では、リレーショナルデータベースよりも高速な Redis が有効です。
-
プレイヤーセッションの保持
- 各プレイヤーのログイン状態や一時的なゲーム内情報の管理に使用されます。大量同時接続にも高いパフォーマンスを維持できます。
-
チート対策・アクセス制限
- 一定時間内のアクション回数を計測し、不正行為や過剰なリクエストを検知・制御する用途で利用されます。
Redis はこのように、「高速な処理」と「一時的なデータ」の管理を求められる場面で、その強みを発揮します。一方、ユーザーアカウントや課金履歴など、永続性が必須なデータは、リレーショナルデータベース等と併用する構成が一般的です。
AWS ElastiCache for Valkey の環境構築
以下では、AWS マネジメントコンソールを利用して ElastiCache for Valkey の環境を構築する標準的な手順を示します。
前提条件
- AWS アカウントを所持していること
クラスターの作成手順
- Amazon ElastiCache コンソール を開きます
- Valkey キャッシュ を作成します
- モード: Valkey
- デプロイオプション: サーバーレス
- 作成方法: 新しいキャッシュ
- 名前: 任意
- 説明: 任意
- エンジンバージョン: デフォルトまたは要件に応じて選択
- クラスターが作成されると、「エンドポイント」が表示されます。このエンドポイント(例:
xxxxx.abcdefg.ng.0001.apne1.cache.amazonaws.com:6379
)を使って、アプリケーションや Valkey CLI から接続できます。
動作確認: Valkey CLI からの接続例
AWS EC2 などの、Valkey キャッシュと同じ VPC 内にあるサーバーから、Valkey CLI で接続する例を示します。
EC2 インスタンスの接続
作成した Valkey キャッシュの詳細ページの「接続されたコンピューティングリソース > コンピューティング接続をセットアップ」をクリックします。
EC2 インスタンスの作成がまだであれば、作成します。
接続先のインスタンスを設定し「セットアップ」をクリックします。
Valkey CLI のインストール
インスタンスに接続します。
ssh -i PEMキーのパス ec2-user@パブリックIP
valkey をインストールします。
sudo yum install valkey
参考:
Valkey キャッシュへの接続
下記のコマンドで接続します。 YOUR_END_POINT の部分は Valkey キャッシュのエンドポイントで置き換えてください。(エンドポイント末尾に含まれる :6379
は削除し -p オプションとして指定します。)
valkey-cli --tls -h YOUR_END_POINT -p 6379
ping コマンドを打って pong が返ってくることを確認します。
> ping
PONG
参考:
Valkey の基本操作
ここでは、Valkey CLI を使った基本的なコマンド操作について説明します。Valkey は Redis OSS 7.0 互換であるため、従来の Redis コマンドと同様のインターフェースで利用できます。
文字列データの保存・取得
もっとも基本的なデータ操作は SET
および GET
です。
たとえば、キー sample_key
に値 hello
を保存し、取得する例は以下のとおりです。
> SET sample_key hello
OK
> GET sample_key
"hello"
有効期限付きデータの保存
キャッシュや一時的なデータ管理用途では、データに有効期限(TTL)を設定できます。
EX
オプションで秒数を指定します。
> SET session_token_123 abcdefg EX 300
OK
> TTL session_token_123
(integer) 295
スコアランキングの管理(ZSET の利用)
ゲーム開発において、リアルタイムランキングを効率的に実現したい場合、Valkey の「ソート済みセット(ZSET)」型が有用です。
スコア登録
例として、game_leaderboard
というランキングに各プレイヤーのスコアを記録します。
> ZADD game_leaderboard 1200 playerA
(integer) 1
> ZADD game_leaderboard 990 playerB
(integer) 1
> ZADD game_leaderboard 1500 playerC
(integer) 1
上位N件の取得
スコアの高い順(降順)で上位3名を取得する場合は ZREVRANGE
を用います。
> ZREVRANGE game_leaderboard 0 2 WITHSCORES
1) "playerC"
2) "1500"
3) "playerA"
4) "1200"
5) "playerB"
6) "990"
指定プレイヤーの順位取得
特定プレイヤーの順位を知りたい場合は ZREVRANK
で取得できます。
> ZREVRANK game_leaderboard playerB
(integer) 2
スコアのインクリメント
特定プレイヤーのスコアを加算する場合は ZINCRBY
を利用します。
> ZINCRBY game_leaderboard 200 playerB
"1190"
補足1: その他のよく使う Valkey コマンド
-
キー一覧の取得(SCAN)
> SCAN 0
-
全データの削除(開発用途のみ:FLUSHALL)
> FLUSHALL
補足2: Redis と Valkey の違いおよび移行時の検討ポイント
ElastiCache for Valkey への移行を検討する際、多くの方がまず気にするのは「既存の Redis システムがそのまま Valkey で動作するのか」 「コスト・ライセンス・バージョン運用で注意すべき点は何か」という点です。
既存の Redis OSS 7.x までの運用システムは、Valkeyに対して「ほぼそのまま」安全かつコスト効率よく移行可能です。 商用・クラウドサービスでの法的リスク回避や長期的なサポート継続性を重視する場合は Valkey が推奨されます。ただし、「Redis v8 以降の新機能」や「ライセンス条件(AGPLv3 等)」を利用する場合は、法務・技術両面で追加検討が必要です。 ElastiCache 上では新規クラスター構築+明示的なデータ移行が必須である点にもご注意ください。
API・コマンド互換性
Valkey は Redis OSS 7.2.4(BSD ライセンス最終版)までの API・コマンドと高い互換性を維持しています。アプリケーションが Redis 7.2.x までの標準コマンドセットで動作していれば、Valkey へ移行しても基本的に動作は変わりません。主要クライアントライブラリ(redis-py、Jedis、node-redis 等)もそのまま利用できます。
パフォーマンスと運用コスト
-
コスト面
ElastiCache for Valkey は、同等スペックの Redis OSS より最大約 33% コスト削減(2024 年 6 月時点/AWS 公表値)が可能です。特にサーバーレス構成を選択することで、利用状況に応じたコスト最適化が容易になります。 -
パフォーマンス面
Valkey は Redis 7.2 系と同等のパフォーマンス・可用性を実現しています。主要クラウドベンダーのサポートも充実しており、実運用面での不安材料はほとんどありません。
ライセンス・商用利用の観点
-
Redis OSS(v8 以降)
2025 年 5 月より、Redis OSS は AGPLv3(OSI 承認済み)、SSPLv1、RSALv2 の「トライライセンス」方式となっています。AGPLv3 はネットワーク越しのサービス提供時にもソース公開を義務付ける強力なコピーレフトライセンスであり、商用 SaaS やクラウド事業者にとっては法務上の配慮が不可欠です。Redis v8 以降の最新機能(例:Vector Sets 等)は Valkey では利用できません。 -
Valkey
BSD 3-Clause(パーミッシブライセンス)を維持しており、商用・クラウドサービスを含めてライセンス制約なく利用可能です。AWS、Google Cloud、Oracle Cloud など主要クラウド事業者も Valkey を公式サポートしています。
参考:
まとめ
Valkey(および Redis OSS)は、インメモリ型の超高速データストアとして、セッション管理やキャッシュ用途はもちろん、ゲームランキングのようなリアルタイム性とスケーラビリティを要求される場面でも高い効果を発揮します。AWS ElastiCache for Valkey のサーバーレス構成を利用することで、運用管理の負担も大きく削減しながら、API・コマンド互換性を活かした多様なユースケースに対応可能です。
参考
- https://aws.amazon.com/jp/elasticache/
- https://aws.amazon.com/jp/blogs/news/get-started-with-amazon-elasticache-for-valkey/
- https://docs.aws.amazon.com/AmazonElastiCache/latest/dg/VersionManagement.HowTo.html#VersionManagement.HowTo.cross-engine-upgrade
- https://valkey.io/
- https://valkey.io/topics/installation/
- https://valkey.io/topics/cli/
- https://redis.io/
- https://redis.io/blog/agplv3/
- https://dev.classmethod.jp/articles/amazon-elasticache-for-redis-amazon-elasticache-for-valkey/