|
| |
| 作者 | Salvatore Sanfilippo(2020年6月30日まで)[1][2] |
|---|---|
| 開発元 | Redis Ltd.(2015年7月15日から) |
| 初版 | 2009年2月26日[3] |
| 最新版 | 7.4.2 - 2025年1月6日[4] [±] |
| リポジトリ | |
| プログラミング 言語 | C |
| 対応OS | クロスプラットフォーム |
| 対応言語 | 英語 |
| サポート状況 | 活動中 |
| 種別 | データストア |
| ライセンス | Redis Source Available License v2 と Server Side Public License v1 のデュアルライセンス[5] |
| 公式サイト |
redis |
Redisは、Redis Ltd.が開発している、ネットワーク接続された永続化可能なインメモリデータベース。連想配列(キー・バリュー)、リスト、セットなどのデータ構造を扱える。いわゆるNoSQLデータベースの一つ。ライセンスはソースアベイラブル[6]。
Redisの名称はREmote DIctionary Serverを意味している[7][8]。
DB-Engines.comの月間ランキングでは、Redisはしばしば最もポピュラーなキー・バリュー型データベースとして評されている[9]。また、Redisは2015年のユーザーレビューによる満足度と市場でのプレゼンスの評価でNoSQLデータベースで4位を[10]、Docker等の各種コンテナ上で使われているNoSQLデータベースとして1位を[11]、さらに上位50デベロッパーツール&サービスにおけるNoSQLデータベースとしても1位を獲得している[12]。
以下のような数多くのプログラミング言語からの使用が可能である[41]。
ActionScript, Bash, C, C++, Chicken Scheme, Clojure, Common Lisp, C#, Crystal, D, Dart, Delphi, Deno, Elixir, Emacs Lisp, Erlang, gawk, GNU Prolog, Go, Haskell, Haxe, Io, Java, JavaScript (Node.js), Julia, Lua, Nim, Objective-C, OCaml, Perl, PHP, Pure Data, Python, R,[42] Racket, Ruby, Rust, Scala, Smalltalk, Tcl
Redisではキーと値を紐づけて保存する。しかしRedisと他の構造型ストレージの重要な違いとして、Redisはバイナリ列(文字列, string)だけでなく以下のようなデータタイプをサポートする。Redis ではバイナリ列のことを string と呼んでいるが、特に文字の使用だけに限った物ではない。
値のデータタイプは、各タイプごとに用意された操作(コマンド)で決定される。RedisはINTERSECTIONやUNION、セットやリストの差分抽出といったサーバーサイド操作をアトミックにサポートする。
Redisでは一般的に全てのデータはメモリ上に格納される。バージョン2.4よりバーチャルメモリと名付けられたデータをディスク上に格納する機構が使用可能となったが[43]、これは後に非推奨となっている。永続性を実現するための方法としては、3.2現在では2つの手段が用意されている。1つ目はスナップショットと呼ばれるもので、スナップショットではメモリ上のデータは非同期で時折RDBダンプの形式でディスク上に書きこまれる。もう1つの手段が、1.1から存在するAOF (append-only file) と呼ばれるもので、こちらはメモリ上のデータが変更されるごとにトランザクションログが書きこまれる安全な方式となっている。Redisはトランザクションログの肥大化防止のためにバックグラウンドでこれを再生成することができる。
デフォルトでは、Redisは2秒間隔でデータをファイルシステムに書きこむようになっているが、必要であればより安全なオプションを使用することもできる。デフォルト設定でシステムが完全に失敗した場合でも、失われるデータは数秒間分に限られる。
Redisはマスター・レプリカ・レプリケーションをサポートする。Redisサーバーのデータは、複数台のレプリカに複製できます。レプリカは、他のレプリカのマスターになることができます。これにより、Redisは単一ルートのレプリケーションツリーを実装できます。Redisのレプリカには書き込みを許可する設定も可能で、その場合インスタンス間の不整合を許容する形になる。Redisは出版-購読型モデル (Publish/Subscribe) を完全に実装しており、マスターで出版 (Publish) されたメッセージは、レプリカに接続して購読 (Subscribe) しているクライアントにも到達する。レプリケーションは、読込みの拡張性(書込みは除く)とデータの冗長性向上に有効である。[44]
データの永続性が必要ない場合において、Redisはメモリ上のみで動作することが可能であり、トランザクションのコミットごとにディスクへの書き込みが発生するデータベースと比べて性能的に優位である[7]。Redisの操作はシングルスレッド上のシングルプロセスとして動作する。そのため、1つのRedisインスタンスでは例えばストアドプロシージャのように並列に処理を実行することはできない。
Redisプロジェクトはクラスター仕様を持っており[45]、開発者のSanfilippoはRedis clusterの製品版ではキー空間の自動パーティショニングとホットリシャーディングをサポート、ただしシングルキー操作のみに対応、という投稿を行っている[46](β版が2013年末にリリース予定[47])。将来のバージョンでは、1000以上のノードをサポートし、ハートビートと障害検知によりフォールトトレランスを実現、スレーブのマスターへの昇格、全ノードへの出版-購読モデルなどが構想されている[45][48]。
Redis に加えて下記の物を加えた物を Redis Stack として配布している[49]。これらのソフトウェアもソースアベイラブルで配布されている[50]。
以下は、かつて Redis Stack に含まれていた物。
以下は、かつて開発されていた物。Redis Stack にも含まれていない。
未登録
IPFS未登録
📡 0ピア
N=1
CRITICAL
PQS A90