Redis、Valkey、DragonflyDB:インメモリデータベースのモダンガイド
インメモリデータベースは現代アーキテクチャのコア構成要素となっています:キャッシュ、軽量キュー、セッションストア、時系列エンジン、さらにはベクトル検索の基盤としても使用されています。
2024年のRedisのライセンス変更により、ValkeyとDragonflyDBという2つの強力な代替案が登場しました。どちらもRedisプロトコルとの互換性を維持していますが、パフォーマンス、ライセンス、ハードウェア活用のアプローチは異なります。
このノートでは、それらの主な違いと、Spring Bootプロジェクトでコードの書き方を変えることなく使用する方法を紹介します。
Redis:業界標準
10年以上にわたり、Redisはインメモリデータベースの事実上の標準でした。小規模なサイドプロジェクトから高トラフィックプラットフォームまで、あらゆる場面で活用されています。
コアデータ処理エンジンは操作をシンプルかつアトミックに保つためにシングルスレッドのままであるものの、最近のバージョンではブロッキング作業をオフロードするバックグラウンドスレッドとI/Oスレッドを導入しています。
- 現在の状態:Redis 8.0にはかつて「Redis Stack」として提供されていた機能が内蔵されています:
- JSONサポート
- 時系列
- ベクトル検索(Vector Sets)
- ライセンス:現在はRSALv2、SSPLv1、またはAGPLv3のトリプルライセンスモデルを採用しています。つまりRedisはもはやOSI承認のオープンソースではなく、商用製品やマネージドサービスでの使用を慎重に検討する必要があります。
Redisは以下が必要な場合に最適です:
- 本質的にすべての言語に対応した非常に成熟したエコシステムが必要な場合
- 公式のエンタープライズサポートが必要な場合
- 幅広い高度なモジュール(AI、検索、JSONなど)が必要な場合
Valkey:コミュニティの後継、真のオープンソース
Valkeyは最後のBSDライセンス版Redis(7.2.4)の_フォーク_として作成されました。Linux Foundationが支援し、AWSやGoogleなどの企業がサポートしています。
その目標は明確です:完全にオープンなRedis互換エンジンを提供し、コマンドとプロトコルの互換性を維持しつつ、内部データ構造を改善すること。
- 真のオープンソース:BSDスタイルのライセンスを維持し、OSIオープンソースに準拠しています。
- メモリの革新:CPUキャッシュに優しいように内部ハッシュテーブルを再設計し、キーとバリューのペアごとに約20バイトのメモリ使用量を削減しています。
- Valkey 9.0:Atomic Slot Migrationを導入し、クライアント側でエラーが見えない状態でクラスターリバランスを最大9倍高速化しています。
Valkeyは特に以下の場合に魅力的です:
- Redisから移行し、ほぼドロップイン互換を望む場合
- 組織が100%オープンソースソフトウェアを要求する場合
- メモリ使用量の削減によりクラウドコストを最適化したい場合
DragonflyDB:クラウド時代のために構築
DragonflyDBはRedisのフォークではありません。現代のマルチコアハードウェアを完全に活用するためにゼロから構築された新しいエンジンです。
- アーキテクチャ:各スレッドが独自のデータシャードを所有する共有なし設計を使用しています。これによりグローバルロックとボトルネックが排除され、単一マシンでの積極的な垂直スケーリングが可能になります。
- メモリ効率:その"Dashtable"構造は、キーのパターンに応じて従来のRedisと比較して30%〜60%のメモリを節約できます。
- パフォーマンス:多くのシナリオで従来のRedis展開と比較して最大25倍高速であると報告されており、特に重い読み書きワークロードで顕著です。
- ライセンス:BSL(Business Source License)を使用しています。多くのシナリオで無料で使用できますが、OSI承認ではなく、競合サービスには制限があります。
DragonflyDBは以下の場合に優れています:
- テラバイト規模のインメモリデータを管理する場合
- 単一ノードで毎秒数百万回の操作が必要な場合
- ピーク負荷を処理するために必要なインスタンス数を減らしたい場合
実用比較
| 機能 | Redis 8.0 | Valkey 9.0 | DragonflyDB |
|---|---|---|---|
| エコシステム | 最も成熟したエコシステム、多くのクライアントとツール | 急速に成長、Redisツールとの高い互換性 | 若く、高性能ユースケースに焦点 |
| ライセンス | RSALv2、SSPLv1、またはAGPLv3(OSI非対応) | BSD、真のオープンソース | BSL、制限付き無料 |
| スレッドモデル | シングルスレッドコア+マルチスレッドI/O | 改善された非同期I/Oを持つシングルスレッドコア | 真のマルチスレッド、共有なし設計 |
| 典型的なユースケース | エンタープライズサポートと高度モジュールが必要な重要なアプリ | オープンソースとコスト最適化が重要なRedisからの移行 | 単一ノードでの巨大ワークロード(TBデータ、毎秒数百万回の操作) |
| メモリ使用量 | 元の設計により効率的だが限界がある | キーバリューペアごとに約20バイト節約 | 多くのシナリオでRedisと比較して30〜60%節約 |
Spring Boot統合
最も良い点は、3つのエンジンすべてがRedisプロトコルを話すため、Spring Bootからの統合はほとんど同じに見えることです。
pom.xmlでは標準の依存関係だけが必要です:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>そしてapplication.properties(またはapplication.yml)では、正しいホストを指すだけです:
# Redis、Valkey、DragonflyDBで同じように動作
spring.data.redis.host=localhost
spring.data.redis.port=6379シンプルなキャッシュサービスは3つのエンジンすべてで全く同じに見えます:
@Service
public class CacheService {
@Autowired
private StringRedisTemplate redisTemplate;
public void saveData(String key, String value) {
// Redis、Valkey、DragonflyDBでのアトミック操作
redisTemplate.opsForValue().set(key, value);
}
}クライアントがRedisプロトコルを使用する限り、RedisからValkeyやDragonflyDBへの切り替えはURLの変更と展開パラメータの調整(メモリ、CPU、永続化など)だけで済むことがよくあります。
プロジェクトでの選択方法
実用的な判断方法は、以下の軸で考えることです:
- ライセンスと企業ポリシー:
- 組織がOSI承認のオープンソースを要求する場合、Valkeyが自然な選択です。
- すでにRedisとの商用契約やサポートがある場合、Redisのままの方がシンプルです。
- 最大限のパフォーマンスを望み、BSLスタイルのライセンスを受け入れる場合、DragonflyDBは非常に魅力的です。
- ワークロードパターン:
- 中程度の負荷と安定したエコシステムが必要な場合、Redisで十分です。
- メモリあたりのコストが重要な環境では、ValkeyとDragonflyDBが請求額を下げられます。
- 単一ノードでの極端な負荷では、DragonflyDBが主要候補になります。
- クラウド戦略:
- クラウドプロバイダーが各エンジンに対して提供するマネージドサービスを確認してください。
- 総コストを評価:インスタンス、サポート、ストレージ、ネットワークトラフィック。
理解しやすいメタファー
これらのデータベースをレストランに例えると:
- Redisは15年以上の評判がある高級レストランです。最も完成されたメニューがあり、誰もが知っていますが、主要な料理はシングルスレッドのシェフ(メインスレッド)が調整しなければならないため、行列ができます。
- Valkeyは元のシェフたちが作った協同組合です。非常に似たレシピを使用し、キッチンを効率的に再設計し、入り口を無料で開放することを約束しています。
- DragonflyDBは最新世代の産業キッチンです。並列に作業する複数の独立ステーションがあり、単一建物から都市全体に汗をかかずに給仕できるように設計されています。
予算、食事人数(負荷)、サービスタイプ(サポート、オープンソース、極限パフォーマンス)の観点で考えると、Redis、Valkey、DragonflyDBの選択がはるかに簡単になります。