RedisユーザーのためのValkey移行ガイドと注意点
1. はじめに
長年にわたり、インメモリデータストアのデファクトスタンダードとして多くの開発者に愛されてきたRedis。その驚異的なパフォーマンス、豊富なデータ構造、そしてシンプルな操作性により、キャッシング、セッション管理、リアルタイム分析、メッセージキューなど、数え切れないほどのユースケースで採用されてきました。しかし、2024年3月、RedisのライセンスがBSDライセンスから、より制限の厳しいRSALv2 (Redis Source Available License v2) と SSPLv1 (Server Side Public License v1) のデュアルライセンスに変更されることが発表され、オープンソースコミュニティとRedisユーザーに大きな衝撃を与えました。
このライセンス変更は、特にクラウドプロバイダーがRedisをマネージドサービスとして提供することを制限するものであり、多くのユーザーが将来的な利用やコミュニティのあり方について懸念を抱くきっかけとなりました。
こうした状況の中、Redisの最後のオープンソースバージョン(7.2.4)からフォークする形で、新たなプロジェクトが立ち上がりました。それが「Valkey(ヴァルキー)」です。Linux Foundationの支援のもと、Amazon Web Services (AWS)、Google Cloud、Oracle、Ericsson、Snap Inc. といった業界の主要プレイヤーが結集し、Redisの精神を受け継ぎつつ、真にオープンでコミュニティ主導の開発を継続することを目的としています。
Valkeyは、Redisとの完全なAPI互換性を維持することを目指しており、既存のRedisユーザーにとっては、アプリケーションのコードをほとんど変更することなく移行できる、非常に有力な選択肢となります。
この記事では、現在Redisを運用している開発者、インフラエンジニア、そして意思決定者の皆様を対象に、Valkeyへの移行を成功させるための包括的なガイドを提供します。Valkeyとは何か、Redisと何が違うのかという基本的な情報から、移行計画の策定、具体的な移行手順、そして移行後の運用における注意点まで、詳細かつ実践的に解説します。ライセンス変更という大きな変化の波を乗りこなし、Valkeyという新しい船出を成功させるための一助となれば幸いです。
2. Valkeyの概要とRedisとの違い
移行を検討する上で、まずはValkeyがどのようなプロジェクトであり、Redisと何が同じで何が違うのかを正確に理解することが不可欠です。
Valkeyの誕生経緯
Valkeyの誕生は、Redisのライセンス変更に直接起因します。
-
Redisのライセンス変更: Redis Ltd.(旧Redis Labs)は、長年Redisの開発を主導してきましたが、クラウドプロバイダーがRedisのコードを無償で利用して競合サービスを提供している状況を問題視していました。この状況に対処するため、2024年3月20日、バージョン7.4以降のRedisのライセンスを、従来の寛容なBSD 3-Clauseライセンスから、RSALv2とSSPLv1というソースアベイラブルライセンスに変更することを発表しました。これらのライセンスは、Redisをサービスとして第三者に提供する場合に、ソースコードの開示や契約などを求めるものであり、オープンソースの定義からは外れるものと見なされています。
-
コミュニティの反応とフォークの決断: この変更は、オープンソースの原則を重視する多くの開発者や企業から強い反発を受けました。特に、これまでRedisに多大な貢献をしてきた主要なクラウドプロバイダーは、このままでは将来的な開発や利用が困難になると判断しました。そこで、ライセンスが変更される直前の最後のBSDライセンス版であるRedis 7.2.4をベースとして、新たなフォークプロジェクトを立ち上げることを決定しました。
-
Linux Foundation傘下での発足: この動きはすぐに大きな支持を集め、AWS、Google Cloud、Oracleといった競合するクラウドベンダーが一堂に会し、Linux Foundationの管理下でプロジェクトを推進することで合意しました。プロジェクト名は公募の末、「Valkey」に決定。これは、オープンなコラボレーションとコミュニティの力を象徴するものです。
Redisとの技術的な類似点:ほぼ完全な互換性
Valkeyの最も重要な特徴は、Redisとの高い互換性です。ValkeyはRedis 7.2.4のコードベースを直接引き継いでいるため、現時点では以下の点でRedisとほぼ同一です。
- APIとコマンドセット:
GET
,SET
,HSET
,LPUSH
といった全てのRedisコマンドは、Valkeyでも全く同じように動作します。アプリケーションコード内のコマンド呼び出しを変更する必要はありません。 - データ型: Strings, Hashes, Lists, Sets, Sorted Sets, Streams, HyperLogLogs, Bitmaps, Geospatial indexes といったRedisの豊富なデータ型は、すべてValkeyでサポートされています。
- プロトコル: クライアントとサーバーが通信するためのプロトコル(RESP)も同一です。これにより、既存のRedisクライアントライブラリ(Jedis, redis-py, node-redisなど)を、接続先をValkeyサーバーに変更するだけで、そのまま利用し続けることができます。
- 設定ファイルとデータフォーマット: 設定ファイル (
redis.conf
はvalkey.conf
になりますが、パラメータの多くは共通です)や、永続化のためのRDB/AOFファイルのフォーマットも互換性があります。これにより、RedisのバックアップファイルをValkeyでリストアすることも可能です。
つまり、技術的な観点から見れば、「ValkeyはBSDライセンスで開発が継続されるRedis」と捉えて差し支えありません。
Redisとの違いとValkeyの将来性
技術的な互換性は高い一方で、プロジェクトの根幹に関わる重要な違いが存在します。これこそが、多くのユーザーがValkeyを選択する理由となるでしょう。
-
ガバナンス(意思決定の仕組み)
- Redis: Redis Ltd.という一企業が開発のロードマップや意思決定を主導します。コミュニティからの貢献は受け入れられますが、最終的な方向性は企業の方針に依存します。
- Valkey: Linux Foundationの管理下にあるコミュニティ主導のプロジェクトです。技術的な意思決定は、コントリビューターから選出されたテクニカルステアリングコミッティ(TSC)によって行われます。特定の企業の利益に偏ることなく、コミュニティ全体の利益を最大化するような開発が期待されます。
-
ライセンス
- Redis (7.4以降): RSALv2 / SSPLv1(ソースアベイラブル、商用利用に制限あり)
- Valkey: BSD 3-Clause(パーミッシブ・ライセンス、商用利用を含め非常に自由度が高い)
ValkeyのBSDライセンスは、誰でも自由に利用、改変、再配布、そしてサービスとしての提供が可能であることを保証します。これは、オープンソースの本来の価値を維持し、エコシステムの健全な発展を促す上で極めて重要です。
-
将来の機能開発
現時点ではValkeyはRedis 7.2.4のクローンですが、今後は独自の進化を遂げていきます。Valkeyコミュニティは、すでに将来のロードマップについて議論を始めており、以下のような機能強化が検討されています。- よりスケーラブルなクラスタリング: 現在のRedis Clusterよりも大規模なクラスターを効率的に管理できる仕組みの検討。
- IOスレッディングの改善: マルチスレッドの活用をさらに進め、マルチコアCPUの性能を最大限に引き出すための改良。Redis 6で導入されたIOスレッドは、ネットワーク処理の並列化に留まっていますが、Valkeyではコマンド実行の並列化など、より踏み込んだ改善が期待されます。
- 新しいデータ構造: コミュニティのニーズに応じた新しいデータ構造の追加。
- トリガーやサーバーサイド関数: データベースのイベントに応じてロジックを実行する機能の強化。
Redisが今後、自社の商用製品であるRedis Enterpriseとの連携を強化する方向に進む可能性があるのに対し、Valkeyはオープンソースとして、より汎用的で高性能な機能開発に注力していくことが予想されます。
3. 移行の計画と準備
Valkeyへの移行は技術的に比較的容易ですが、本番環境でのサービス影響を最小限に抑えるためには、慎重な計画と準備が不可欠です。行き当たりばったりの作業は避け、以下のステップを着実に進めましょう。
移行の必要性の評価
まず、本当にValkeyへの移行が必要か、冷静に評価することから始めます。
-
現在のRedisの利用状況の把握:
- バージョン: どのバージョンのRedisを使用していますか? (例: 6.2, 7.0, 7.2)
- 構成: スタンドアロン、SentinelによるHA構成、Redis Cluster構成のどれですか?
- ホスティング環境: セルフホスト(オンプレミス/IaaS)ですか? それともクラウドのマネージドサービス(AWS ElastiCache, Google Cloud Memorystore, Azure Cache for Redisなど)ですか?
- 利用機能: Redisのコア機能のみか、RedisJSON, RediSearch, RedisGraphなどの特定のRedisモジュールを使用していますか?
-
ライセンス変更による影響分析:
- セルフホストの場合: 現在BSDライセンスのRedis 7.2以前を使い続ける限り、直接的なライセンス違反にはなりません。しかし、今後のセキュリティパッチや新機能の恩恵は受けられなくなります。将来的にバージョンアップが必要になった際に、Valkeyへの移行か、Redisの新ライセンスを受け入れるかの選択を迫られます。
- マネージドサービスの場合: クラウドベンダーの対応に依存します。AWS、Google Cloud、OracleはValkeyを支持しており、将来的には自社のマネージドサービスをValkeyベースに移行する(またはValkeyの選択肢を追加する)ことを公言しています。ベンダーからの公式アナウンスを注視する必要があります。
-
Valkeyに移行するメリット・デメリットの整理:
- メリット:
- BSDライセンスの保護下に留まり、将来的なライセンスの懸念から解放される。
- 活発なコミュニティ主導の開発による、継続的な機能改善とセキュリティパッチを享受できる。
- 主要クラウドベンダーが支持しており、エコシステムの発展が期待できる。
- デメリット:
- 移行作業そのものにコスト(時間、人手)がかかる。
- ごくわずかですが、未知のバグや互換性の問題が発生するリスクがある。
- 特定のRedisモジュールがValkeyでサポートされていない可能性がある(後述)。
- メリット:
これらの評価を経て、移行が自社の戦略にとって有益であると判断した場合、次のステップに進みます。
移行戦略の策定
システムの要件(特にダウンタイムの許容度)に応じて、最適な移行戦略を選択します。
-
戦略1: インプレースアップグレード (In-place Upgrade)
- 概要: 既存のRedisサーバーを停止し、同じサーバー上でRedisをアンインストールしてValkeyをインストールし、再起動する方法。
- メリット: 構成がシンプルで、追加のインフラが不要。
- デメリット: サービスの停止(ダウンタイム)が避けられない。
- 適したシナリオ: 開発環境、ステージング環境、または定期メンテナンスなどでダウンタイムが許容できる本番システム。
-
戦略2: ブルー/グリーンデプロイメント (Blue/Green Deployment)
- 概要: 既存のRedis環境(ブルー)とは別に、全く新しいValkey環境(グリーン)を構築します。データ移行後、アプリケーションの接続先をブルーからグリーンに一斉に切り替えます。
- メリット: ダウンタイムをほぼゼロにできる。問題発生時に即座にブルー環境に切り戻せるため、安全性が高い。
- デメリット: 移行期間中、2倍のインフラコストがかかる。データ同期の仕組みを別途考慮する必要がある。
- 適したシナリオ: ダウンタイムが許容されないミッションクリティカルなシステム。
-
戦略3: レプリケーションを利用した移行
- 概要: 新しく構築したValkeyサーバーを、既存のRedisマスターのレプリカとして参加させます。データが完全に同期された後、アプリケーションの接続先をValkeyに切り替え、Valkeyをマスターに昇格させます。これはブルー/グリーンデプロイメントの一種とも言えます。
- メリット: ダウンタイムを最小限(接続先切り替えの数秒〜数十秒)にできる。リアルタイムでデータが同期されるため、データ移行の漏れがない。
- デメリット: ネットワーク構成やファイアウォールの設定が必要になる場合がある。
- 適したシナリオ: ほとんどの本番システムにとって最も現実的で安全な方法。
事前準備
具体的な作業に入る前に、以下の準備を徹底してください。
-
互換性の確認:
- Redisモジュール: これが最大の注意点です。RedisJSONやRediSearchのような、Redis Ltd.が開発したモジュールを使用している場合、Valkeyでの互換性は保証されていません。Valkeyコミュニティが互換モジュールを開発するか、代替手段(例: PostgreSQLのJSONB機能、Elasticsearchなど)を検討する必要があります。移行計画の初期段階で、使用しているモジュールのValkeyでのサポート状況を必ず確認してください。
- クライアントライブラリ: 前述の通り、プロトコル互換性があるため、ほとんどのクライアントライブラリは問題なく動作します。しかし、念のため、使用しているライブラリのドキュメントやコミュニティで、Valkeyへの対応について言及がないか確認しておくとより安心です。
- 管理・監視ツール: Prometheus ExporterやDatadog Agentなど、Redisを監視しているツールがValkeyでも同様に機能するか確認します。
INFO
コマンドの出力などがわずかに変わる可能性もゼロではないため、テスト環境で検証が必要です。
-
テスト環境の構築:
- 本番環境と可能な限り同じ構成(OS、スペック、ネットワーク設定、データ量)でValkeyのテスト環境を構築します。
- この環境で、アプリケーションのすべての機能が正常に動作するか、一通りのリグレッションテストを実施します。
- 負荷テストツール(
redis-benchmark
改めvalkey-benchmark
、JMeterなど)を使い、移行前後のパフォーマンス(レイテンシ、スループット)に変化がないか測定します。
-
バックアップの取得:
- 移行作業直前に、必ずRedisの最終的なバックアップを取得します。RDBスナップショットとAOFファイルの両方を取得しておくことが望ましいです。
- バックアップからのリストア手順を再確認し、実際にテスト環境でリストアできることを検証しておきます。
-
移行計画書の作成:
- 手順書: 誰が作業しても同じ結果になるよう、具体的なコマンドレベルまで落とし込んだ詳細な手順書を作成します。
- 役割分担: 誰がどの作業を担当するのかを明確にします(インフラ担当、アプリ担当、QA担当など)。
- タイムライン: 各作業の開始・終了時刻、全体の所要時間を見積もります。
- 連絡体制: 関係者間のコミュニケーション方法(Slackチャンネル、電話会議など)を定めます。
- 切り戻し計画(ロールバックプラン): 「何が起きたら中止して元の状態に戻すか」という判断基準と、具体的な切り戻し手順を定義しておきます。これが移行の成否を分ける最も重要な要素の一つです。
4. 具体的な移行手順
ここでは、代表的な構成ごとに、レプリケーションを利用したダウンタイム最小化の移行手順を具体的に解説します。
ケース1: スタンドアロン構成のRedisからの移行
-
[準備] Valkeyサーバーの構築:
- 既存のRedisサーバーとは別の新しいサーバーインスタンスを用意します。
- Valkeyをインストールします。ソースからビルドするか、ディストリビューションのパッケージマネージャを利用します。
“`bash
ソースからビルドする場合の例
sudo apt-get install build-essential tcl
git clone https://github.com/valkey-io/valkey.git
cd valkey
make
sudo make install
``
valkey.conf
* 設定ファイルを準備します。既存の
redis.conf` をコピーし、必要に応じてパスなどを修正します。 -
[実行] ValkeyをRedisのレプリカとして起動:
- Valkeyサーバーで、
valkey-server
をvalkey.conf
を指定して起動します。 valkey-cli
を使ってValkeyサーバーに接続し、REPLICAOF
コマンドを実行して既存のRedisマスターに接続させます。
“`bash
Valkeyサーバー側で実行
valkey-cli
REPLICAOF
OK
“`
* ファイアウォールがRedisのポート(デフォルト6379)を許可していることを確認してください。 - Valkeyサーバーで、
-
[確認] データ同期の完了を確認:
- Valkeyサーバーで
INFO replication
コマンドを実行し、同期状態を確認します。
“`bashINFO replication
Replication
role:slave
master_host:
master_port:
master_link_status:up
master_last_io_seconds_ago:0
master_sync_in_progress:0
…
``
master_link_statusが
upで、
master_sync_in_progressが
0` になっていれば、初期同期が完了し、リアルタイムで変更が反映されている状態です。 - Valkeyサーバーで
-
[実行] アプリケーションの接続先を切り替え:
- ここが唯一、短いサービス影響が発生しうるポイントです。
- アプリケーションの設定ファイル、環境変数、DNSレコードなどを変更し、接続先をRedisマスターからValkeyサーバーに向けます。
- アプリケーションを再起動するか、設定をリロードして変更を反映させます。
- この際、書き込みが一時的にできなくなることを防ぐため、Redisマスターを
CONFIG SET protected-mode yes
などで読み取り専用にしておくと安全です。
-
[実行] Valkeyをマスターに昇格:
- すべてのトラフィックがValkeyに向いていることを確認したら、Valkeyをマスターに昇格させます。
“`bash
Valkeyサーバー側で実行
valkey-cli
REPLICAOF NO ONE
OK
“`
これで、Valkeyは独立したマスターとして動作を開始します。 - すべてのトラフィックがValkeyに向いていることを確認したら、Valkeyをマスターに昇格させます。
-
[後処理] 古いRedisサーバーの停止:
- Valkeyがマスターとして正常に機能していることを十分に確認した後、古いRedisサーバーを停止し、撤去します。
ケース2: Redis Sentinel構成からの移行
Sentinel構成では、ローリングアップデート方式で一台ずつノードを入れ替えていくことで、サービス無停止での移行が可能です。
-
[実行] レプリカの一台を停止:
- まず、HA構成内のいずれか一つのRedisレプリカをシャットダウンします。
-
[実行] Valkeyにアップグレードして再起動:
- 停止したサーバー上で、Redisをアンインストールし、Valkeyをインストールします。
valkey.conf
を準備し、valkey-server
を起動します。この時点では、まだ他のノードからは認識されていません。
-
[確認] Sentinelによる自動認識と同期:
- Sentinelが新しいValkeyインスタンスを(設定が正しければ)自動的に検出し、現在のRedisマスターのレプリカとして構成します。データ同期が開始されるので、
INFO replication
で完了を待ちます。
- Sentinelが新しいValkeyインスタンスを(設定が正しければ)自動的に検出し、現在のRedisマスターのレプリカとして構成します。データ同期が開始されるので、
-
[実行] 全てのレプリカをValkeyにアップグレード:
- 残りのRedisレプリカについても、手順1〜3を一台ずつ繰り返します。
-
[実行] マスターのフェイルオーバー:
- すべてのレプリカがValkeyに置き換わったら、Sentinelに手動でフェイルオーバーをトリガーさせ、Valkeyレプリカの一つを新しいマスターに昇格させます。
“`bash
Sentinelに接続して実行
redis-cli -p 26379
SENTINEL failover
“` - すべてのレプリカがValkeyに置き換わったら、Sentinelに手動でフェイルオーバーをトリガーさせ、Valkeyレプリカの一つを新しいマスターに昇格させます。
-
[実行] 旧マスターをValkeyにアップグレード:
- フェイルオーバーによってレプリカに降格した、最後のRedisノード(旧マスター)を停止し、Valkeyにアップグレードします。再起動すると、新しいValkeyマスターのレプリカとしてクラスターに再参加します。
-
[実行] Sentinel自体のアップグレード:
- 最後に、Sentinelプロセス自体もValkeyにバンドルされている
valkey-sentinel
に置き換えます。これもローリングアップデート方式で一台ずつ行います。
- 最後に、Sentinelプロセス自体もValkeyにバンドルされている
ケース3: Redis Cluster構成からの移行
Redis Clusterの移行も、Sentinelと同様にローリングアップデート方式が基本です。
-
[実行] レプリカノードの一台をValkeyにアップグレード:
- クラスター内のいずれかの一つのレプリカノードを
SHUTDOWN
コマンドで正常に停止します。 - そのサーバーをValkeyにアップグレードし、
valkey-server --cluster-enabled yes ...
のようにクラスターモードで起動します。 valkey-cli --cluster add-node ...
コマンドでクラスターに再参加させます。データ同期が自動的に開始されます。
- クラスター内のいずれかの一つのレプリカノードを
-
[実行] 全てのレプリカノードをアップグレード:
- クラスター内の全てのレプリカノードに対して、手順1を繰り返します。
-
[実行] マスターノードのフェイルオーバー:
- Valkeyにアップグレード済みのレプリカを持つマスターノードを選びます。そのレプリカに接続し、手動フェイルオーバーを実行します。
“`bash
Valkeyレプリカノードに接続して実行
valkey-cli
CLUSTER FAILOVER
“`
これにより、このレプリカがマスターに昇格し、旧マスターがレプリカに降格します。 - Valkeyにアップグレード済みのレプリカを持つマスターノードを選びます。そのレプリカに接続し、手動フェイルオーバーを実行します。
-
[実行] 旧マスターノードをアップグレード:
- レプリカに降格した旧マスター(まだRedisが動作している)をValkeyにアップグレードします。
-
[実行] 全てのマスターノードをValkeyに置き換え:
- 手順3と4を、クラスター内の全てのマスターノードがValkeyに置き換わるまで繰り返します。
Docker/Kubernetes環境での移行
コンテナ環境では、移行はさらにシンプルになります。
-
Docker Compose:
docker-compose.yml
ファイル内のimage
指定をredis:7.2
からvalkey/valkey:7.2
のように変更し、docker-compose up -d
を実行するだけです。データが永続化されているボリュームはそのまま引き継がれます。
“`yaml
# 変更前
services:
redis:
image: “redis:7.2-alpine”
# …変更後
services:
valkey:
image: “valkey/valkey:7.2” # 公式イメージ名を確認
# …
“` -
Kubernetes (StatefulSet):
StatefulSetのマニフェストファイル(*.yaml
)のspec.template.spec.containers.image
フィールドをvalkey/valkey:7.2
に変更し、kubectl apply -f <your-manifest.yaml>
を実行します。StatefulSetのローリングアップデート機能により、Podが一つずつ安全にValkeyに置き換えられていきます。PersistentVolumeClaim (PVC) によってデータも保持されます。
5. 移行後の注意点と運用
移行が完了しても、まだ終わりではありません。Valkeyが安定して稼働していることを確認し、長期的な運用体制を整える必要があります。
動作確認
- 基本的な疎通確認:
valkey-cli
でPING
を実行し、PONG
が返ってくることを確認します。 - アプリケーションのフルテスト: ステージング環境と同様に、本番環境でもアプリケーションの全機能が正常に動作するか、一通りのテストを実施します。特に、書き込み、読み込み、削除、有効期限(TTL)の設定など、基本的なデータ操作が問題ないことを確認します。
- パフォーマンスモニタリング:
- 移行直後は、Valkeyのパフォーマンスメトリクスを注意深く監視します。
INFO
コマンドの出力から、instantaneous_ops_per_sec
(秒間コマンド実行数)、used_memory
(メモリ使用量)、connected_clients
(クライアント接続数)、keyspace_hits
/keyspace_misses
(キャッシュヒット率) などを確認し、移行前と大きな変化がないか、想定通りの値であるかを確認します。- アプリケーション側で観測されるレイテンシも重要な指標です。
設定ファイル (valkey.conf
) の見直し
redis.conf
をベースに作成したvalkey.conf
ですが、Valkeyのバージョンアップに伴い、新しい設定項目が追加されたり、デフォルト値が変更されたりする可能性があります。- 公式ドキュメントを確認し、自社のユースケースに合わせて最適化できるパラメータがないか定期的にレビューしましょう。
監視
- Prometheus、Datadog、New Relicなどの監視ツールを使用している場合、監視対象のプロセス名や設定を
redis
からvalkey
に変更する必要があるかもしれません。 - アラート設定(メモリ使用率、CPU使用率、接続数など)がValkeyでも引き続き有効に機能していることを確認します。基本的にはRedisと同じメトリクスが取得できるはずです。
バックアップとリストア
- 移行後、Valkeyでのバックアップ(RDBスナップショット、AOFの書き込み)が正常に設定通り実行されていることを必ず確認します。
- バックアップファイルから実際にデータをリストアするテストを定期的に実施し、いざという時に確実に復旧できる体制を維持します。
コミュニティへの参加と情報収集
Valkeyはコミュニティ主導のプロジェクトです。最新の情報を得るために、積極的にコミュニティに関わることが推奨されます。
- GitHubリポジトリ: https://github.com/valkey-io/valkey をWatchし、リリースノート、バグ報告、プルリクエストなどを追跡します。
- 公式ウェブサイト/ブログ: https://valkey.io/ で最新のアナウンスを確認します。
- メーリングリスト/Slack/Discord: コミュニティの議論に参加し、他のユーザーと情報交換を行います。
これにより、セキュリティ脆弱性に関する情報や新しいリリースの情報をいち早くキャッチし、安定した運用を継続することができます。
6. 移行に関するFAQ
Q1: どのくらいのダウンタイムが発生しますか?
A1: 移行戦略によります。
* インプレースアップグレード: サーバーの停止からValkeyの起動・確認まで、数分から数十分のダウンタイムが発生します。
* レプリケーションを利用した移行: アプリケーションの接続先を切り替える瞬間のみ、数秒から数十秒程度の非常に短いサービス影響(書き込み不可など)に抑えることが可能です。計画とテストをしっかり行えば、実質ゼロダウンタイムに近い移行も実現できます。
Q2: パフォーマンスに変化はありますか?
A2: ValkeyはRedis 7.2.4のコードをベースにしているため、現時点ではパフォーマンスに有意な差はほとんどありません。移行直後は同等のパフォーマンスが期待できます。将来的には、Valkey独自のパフォーマンス改善(IOスレッドの強化など)により、特定のワークロードではRedisを上回る性能を発揮する可能性があります。移行前後に必ず負荷テストを行い、自身の環境でパフォーマンスを測定することが重要です。
Q3: 既存のクライアントライブラリは本当にそのまま使えますか?
A3: はい、ほぼ全ての場合でそのまま使えます。ValkeyはRedisの通信プロトコル(RESP)を完全に実装しているため、クライアントライブラリは接続先がRedisなのかValkeyなのかを区別しません。設定ファイルで接続先のホスト名やIPアドレスを変更するだけで動作します。
Q4: Redis Enterpriseの機能(例: Active-Active)を使っている場合はどうすればよいですか?
A4: Redis EnterpriseはRedis Ltd.の商用製品であり、その独自の機能(Active-Active地理分散、Redis on Flashなど)はオープンソースのRedisやValkeyには含まれていません。これらの機能に依存している場合、Valkeyへの移行は現実的ではありません。Redis Enterpriseを引き続き利用するか、Valkeyをベースとした他の代替ソリューション(例: クラウドベンダーが提供する類似の機能)を検討する必要があります。
Q5: Redisモジュール(RedisJSON, RediSearchなど)は使えますか?
A5: これが最も注意すべき点です。Redis Ltd.が開発したモジュールの多くは、Redis 7.4以降と同様にソースアベイラブルライセンスに変更されており、Valkeyで公式にサポートされていません。
* 代替案:
* Valkeyコミュニティが互換性のあるオープンソースモジュールを開発するのを待つ。
* アプリケーション側でJSONのシリアライズ/デシリアライズを行う、全文検索にElasticsearchやOpenSearchを利用するなど、他の技術で代替する。
* モジュールの利用が必須である場合は、Valkeyへの移行を見送るか、ライセンス変更前の古いバージョンのRedisを使い続ける(ただしセキュリティリスクあり)という判断になります。
Q6: クラウドのマネージドサービス(ElastiCache, Memorystoreなど)を使っている場合、どうなりますか?
A6: 各クラウドベンダーの対応を待つ必要があります。AWS、Google Cloud、OracleはValkeyプロジェクトの創設メンバーであるため、自社のマネージドサービスでValkeyをサポートする可能性が非常に高いです。
* 予想される展開:
* 既存のRedis互換サービスが、内部的にValkeyベースに切り替わる(ユーザーは意識しない)。
* サービス作成時にエンジンとして「Redis互換」と「Valkey」を選択できるようになる。
* 新しいサービスとして「Managed Service for Valkey」が提供される。
各ベンダーからの公式発表を注視し、それに従ってください。自前での移行作業は不要になる可能性が高いです。
Q7: Valkeyに移行しないという選択肢はありますか?
A7: もちろんです。以下の選択肢が考えられます。
* Redis 7.2以前を使い続ける: BSDライセンス下で利用を継続できます。ただし、将来のバグ修正やセキュリティパッチは提供されなくなるため、長期的な運用にはリスクが伴います。
* Redis 7.4以降の新ライセンスを受け入れる: 自社での利用がRSALv2/SSPLv1のライセンス条項に違反しない(例: Redisをサービスとして外部に提供しない)のであれば、Redisを使い続けることも選択肢です。ただし、法務部門と相談し、ライセンスを正確に理解することが不可欠です。
* 他のデータストアに移行する: ユースケースによっては、PostgreSQL, Cassandra, Dragonfly, KeyDBなど、他のデータベースやインメモリストアがより適している場合もあります。この機会に、技術スタック全体を見直すのも良いでしょう。
7. まとめ
Redisのライセンス変更は多くのユーザーにとって予期せぬ出来事でしたが、その結果として誕生したValkeyは、オープンソースの未来にとって非常にポジティブな一歩と言えます。Linux Foundationのもと、業界の主要企業と活発なコミュニティが協力することで、ValkeyはRedisの優れた遺産を受け継ぎながら、よりオープンで持続可能な形で発展していくことが大いに期待されます。
Redisユーザーにとって、Valkeyへの移行は、ライセンスの懸念から解放され、コミュニティ主導のイノベーションの恩恵を受け続けるための、現時点で最も安全かつ有力な道筋です。幸いなことに、その技術的な互換性の高さから、移行作業のハードルは決して高くありません。
成功の鍵は、慎重な計画と徹底したテストに尽きます。本記事で紹介した評価、計画、準備、そして実行の各ステップを参考に、自社のシステムに合った移行戦略を立ててください。特に、Redisモジュールの互換性確認と、信頼性の高い切り戻し計画の準備は不可欠です。
変化は常に挑戦を伴いますが、同時に新しい機会ももたらします。Valkeyへの移行は、単なるソフトウェアの入れ替えではなく、よりオープンで協力的なエコシステムへの参加を意味します。このガイドが、皆様のValkeyへのスムーズな航海の一助となることを心から願っています。