Redisとは
Redis(REmote Dictionary Server)は、オープンソースで提供されているNoSQL型のインメモリデータベースである。2009年にSalvatore Sanfilippo氏によって開発され、現在はRedis Labsによって開発が行われている。
インメモリデータベースとは、キーと値のペアでデータを管理するkey/value型のデータベースのことである。コンピュータのメモリ内でデータを管理するため、ハードディスクやSSD上にデータを保管するRDBMSよりもデータアクセスの高速性に優れている。リクエストに対して非常に短い応答時間を提供できるため、リアルタイムアプリケーションやキャッシュシステムで活用されている。
RedisはAWSやAzureなど多くのクラウドサービスでも利用され、インメモリデータベースとして広く知られているソフトウェアである。
Redisの特徴
以下では、Redisの特徴について説明する。
インメモリでデータ管理を高速化
前述したように、Redisはインメモリデータベースであるため、データをメモリ上で管理する。そのため、PostgreSQLやMySQL、MariaDBなどの他のバックエンドのデータベースに比べて高速に動作する。さらに、Redisにはデータをディスク上に格納する「データ永続化機能」が用意されているのも特徴である。
Redisのデータ永続化機能とは
Redisは基本的にデータをメモリ上に保存するが、サーバの停止やクラッシュが発生した際でもデータを保持するために、データ永続化の仕組みが用意されている。Redisにおける主要なデータ永続化の方法とそれぞれの特性は以下の通りである。
RDB(Redis Database File)
RDB(Redis Database File)は、一定の時間間隔でメモリ上のデータ全体をディスクに保存する方式である。メモリ上のデータのスナップショット(完全なコピー)を取り、それをバイナリ形式でディスクに書き込む。スナップショットは手動で実行することも、特定の条件(例えば、一定時間が経過したときや、一定数の書き込みが行われたとき)で自動的に保存されるよう設定することも可能である。
ただし、スナップショットは一定間隔でしか保存されないため、一部データが失われるリスクがある。例えば、スナップショット後にサーバーがクラッシュした場合、その間に書き込まれたデータは保存されていない。
AOF(Append Only File)
AOF(Append Only File)は、Redisが行ったすべての書き込み操作を逐次トランザクションログに記録する方式である。この方法では、全ての書き込みコマンドを時間順にディスクに保存することで、サーバの停止時にデータの完全性を保証している。数秒以内のログの記録も設定できるため、データの損失リスクが非常に低いというメリットがある。また、Redisを再起動する際、AOFファイルを読み込み、ログに記録された全てのコマンドを再実行してデータを復元することで、サーバが停止してもデータを正確に再現することができる。
一方で、AOFは頻繁にディスクにログを書き込むため、RDBに比べてディスクI/Oの負荷が大きくなる。そのため、ファイルが大きくなるにつれてパフォーマンスが低下する可能性がある。この対策として、AOFの「リライト」機能を使ってファイルサイズを圧縮することで、ディスク負荷を軽減することができる。
多様な構造でデータを扱える
Redisは、複数のデータ構造を扱うことができる点も特徴である。いわゆるkey-value形式のペア(Key Value Store:KVS)だけでなく、Keyでは文字列、ハッシュ、リスト、セット、ソートされたセットなどのデータ型を指定することができる。ハッシュ型の値のインクリメント、リストへの追加、セット型へのメンバーの追加や削除、ソートされたセットからのランクの取得などを排他的に行うことができる。
分散構成をサポートしている
Redisは、Redis Clusterという複数のサーバを使った分散構成の機能をサポートしている。マスター・スレーブ型の非同期型のレプリケーションを行うことができ、マスターのRedisサーバのデータを複数台のスレーブにレプリケーションすることができる。また、スレーブサーバがマスターとなって、他のスレーブにレプリケーションすることも可能である。さらに、マスターサーバの障害時に、スレーブサーバをマスターに昇格することができるRedis Sentinelという機能もサポートしている。
トランザクション管理ができる
トランザクションを行うと、他のクライアントから発行されたリクエストから排他的に処理を行うことを保証できる。データの一貫性を保つためにも重要な機能となる。
Keyの有効期限設定
Redisでは、Keyに有効期限を設定することができるため、キャッシュのようにデータを管理することができる。
他のデータベースとの比較
次では、Redisと他のデータベースシステムとの違いを解説する。
RedisとMemcachedとの比較
Memcachedは、Danga Interactive社が開発したKVSの実装である。Memcachedは、複数のホストのメモリで分散してデータを管理し、巨大なハッシュテーブルを使用して高速にデータを検索することができる。登録したデータは、すべて管理しているメモリ上で保管するため、システムの再起動などによって失われる可能性がある。また、データがいっぱいになると、古いデータを破棄して新規のデータを登録していく。そのため、あくまで一時的なデータの保管場所として使われるのが一般的である。
一方、Redisはデータの永続化機能を備えており、ディスクにデータを保存することで、再起動後もデータを復元できる。RDBやAOFによる永続化方法を提供しており、キャッシュ用途に加えて信頼性の高いデータ保存を必要とする場合にも対応できることから、ジョブやメッセージのキューを保存するような用途でも利用されている。
Redisとリレーショナルデータベース(RDB)との比較
Redisは主にメモリ上にデータを保存するインメモリデータストアであるのに対して、MySQLやPostgreSQLといったリレーショナルデータベースは、ディスク上にデータを保存するという点が異なる。これにより、Redisはリレーショナルデータベースに比べて非常に高速なデータ読み書きを実現している。一方で、MySQLやPostgreSQLはアクセス速度は劣るが、ストレージの制約が少ないため、大量のデータを効率的に保存・管理するのに適している。
Redisのライセンス変更
Redisは、2024年3月のRedis v7.4のリリース以降、Apache 2.0ライセンスからライセンス形態が変更され、RSALv2(Redis Source Available License)、もしくはSSPLv1(Server Side Public License)のデュアルライセンスに移行することを発表している。
このライセンスは、OSSのライセンスを管理する団体であるOSI(Open Source Initiative)に認められていない、SSPLというライセンスである。そのため、Redisは現状ソースコードは公開されているものの、厳密にはオープンソースではないソフトウェアとなっている。また、このライセンスではソフトウェアを商品化できないことや、ソースコードをすべて公開する必要があるなどの制約があるため、現在はRedisをクラウドサービス等で商用利用することは難しくなっている。
Redisに代わるデータベース〜Valkey〜
Valkeyは、Redisのライセンス変更を受けて、ライセンス変更前のRedisのソースコードをもとにして新たに開発されたOSSである。現在はLinux Foundationという団体が管理しており、AWS、Google Cloud、Alibaba Cloud、Canonical(Ubuntuの開発元)などの大手企業や団体がValkeyプロジェクトに賛同している。
Valkeyも、Redisと同じようにメモリ上のデータをハードディスクに保管してデータを保全する機能も備えている。そのため、メモリ上でのみデータを管理する通常のインメモリデータベースと比べて用途の幅が広いのが特徴である。また、クラスタリングやプログラム言語に関してもRedisと同じように利用することが可能である。しかし、RedisとValkeyは別プロジェクトで開発が進められていくため、今後も両者の親和性が保証されるわけではない。
Valkeyの詳細情報は、以下の記事から確認することができる。
デージーネットの取り組み
デージーネットでは、Redisに代わるOSSのインメモリデータベースとして、Valkeyの調査・検証を行った。インストール方法や使い方など、調査した詳しい結果は「Valkey調査報告書」にて詳しく解説している。
【カテゴリ】:データベース  オープンソースソフトウェア  
【Webセミナー】自社でOSSを採用しよう!今更聞けないOSSの基本セミナー
日程: | 11月22日(金)Webセミナー「BigBlueButton」を使用します。 |
内容: | OSSを導入したいけど、どこから手をつければいいかわからない方必見! |
ご興味のあるかたはぜひご参加ください。 |