Redis

**Redis**は、Redis Ltd.が開発している、ネットワーク接続された永続化可能なインメモリデータベース。連想配列（キー・バリュー）、リスト、セットなどのデータ構造を扱える。いわゆるNoSQLデータベースの一つ。ライセンスはソースアベイラブル。

## 概要
Redisの名称はを意味している。

DB-Engines.comの月間ランキングでは、Redisはしばしば最もポピュラーなとして評されている。また、Redisは2015年のユーザーレビューによる満足度と市場でのプレゼンスの評価でNoSQLデータベースで4位を、Docker等の各種コンテナ上で使われているNoSQLデータベースとして1位を、さらに上位50デベロッパーツール&サービスにおけるNoSQLデータベースとしても1位を獲得している。

## 沿革
*2009年2月4日、RedisのプロトタイプをSalvatore SanfilippoがTclで実装して、Fabio Pitrolaにメールした。
*2009年2月26日、Salvatore Sanfilippo（ハンドルネームantirez）がC言語で実装し直して、最初のβ版をリリースした。
*2010年3月15日、Salvatore SanfilippoがVMwareに入社し、VMwareがスポンサーとなった。
*2013年5月からは、RedisはVMwareをスピンオフしたにスポンサーされるようになった。
*2013年11月4日、Garantia DataがGarantiaをRedisDBに改名した。この変更は、Redisの開発者であるSalvatore SanfilippoやPivotal Softwareに事前通告はなく、その後Garantiaに戻した。
*2014年1月29日、Garantia Dataがに社名変更した。
*2015年7月15日、Redisの開発者のSalvatore SanfilippoがRedis Labsに入社し、Redis Labsがスポンサーとなった。
*2017年2月7日、Redis Enterpriseを発表。
*2018年、Salvatore SanfilippoがRedisの知的財産と商標をRedis Labsに譲渡した。
*2020年6月30日、Redisの開発者のSalvatore SanfilippoがRedis Labsを退職した。
*2021年8月11日、Redis LabsはRedis Ltd.に社名変更した。
*2024年3月20日、バージョン7.4より三条項BSDライセンスからソースアベイラブルである「Redis Source Available License v2」と「Server Side Public License v1」のデュアルライセンスに変更した。その結果、Linux Foundationは「Valkey」という名前でフォークを作成した。これにより、コミュニティのメンテナ、コントリビュータ、ユーザーがRedisデータベースのオープンソース版の開発を継続できるようになった。

### リリース
* 2009年03月 - Redis 1.0がリリース。
* 2010年09月 - Redis 2.0がリリース。
* 2015年04月 - Redis 3.0がリリース。
* 2017年04月 - Redis 4.0がリリース。
* 2017年09月 - Redis EnterpriseがRedis 4.0をサポート開始。
* 2017年11月 - Redis Enterprise 5.0を提供開始。
* 2018年10月 - Redis 5.0がリリース。Redis Streamが導入される。
* 2020年04月 - Redis 6.0がリリース。ACLのサポートを拡大。
* 2020年04月 - Redis Enterprise 6.0を提供開始。
* 2022年04月 - Redis 7.0がリリース。新コマンド、オプションを追加。

## 対応するプログラミング言語
以下のような数多くのプログラミング言語からの使用が可能である。

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, Racket, Ruby, Rust, Scala, Smalltalk, Tcl

## データタイプ
Redisではキーと値を紐づけて保存する。しかしRedisと他の構造型ストレージの重要な違いとして、Redisはバイナリ列（文字列, string）だけでなく以下のようなデータタイプをサポートする。Redis ではバイナリ列のことを string と呼んでいるが、特に文字の使用だけに限った物ではない。
* バイナリ列（string）のリスト（両端キューとして利用可能）
* バイナリ列（string）の集合（ソートされない重複のないコレクション）
* バイナリ列（string）のソートされた集合（浮動小数点数のスコアによりソートされた重複のないコレクション）
* バイナリ列（string）のキーと値からなるハッシュテーブル
* ビットマップ
* 集合の濃度（元の個数）。分布を表現。

値のデータタイプは、各タイプごとに用意された操作（コマンド）で決定される。RedisはINTERSECTIONやUNION、セットやリストの差分抽出といったサーバーサイド操作をアトミックにサポートする。

## 永続性
Redisでは一般的に全てのデータはメモリ上に格納される。バージョン2.4よりバーチャルメモリと名付けられたデータをディスク上に格納する機構が使用可能となったが、これは後に非推奨となっている。永続性を実現するための方法としては、3.2現在では2つの手段が用意されている。1つ目はスナップショットと呼ばれるもので、スナップショットではメモリ上のデータは非同期で時折RDBダンプの形式でディスク上に書きこまれる。もう1つの手段が、1.1から存在するAOF (append-only file) と呼ばれるもので、こちらはメモリ上のデータが変更されるごとにトランザクションログが書きこまれる安全な方式となっている。Redisはトランザクションログの肥大化防止のためにバックグラウンドでこれを再生成することができる。

デフォルトでは、Redisは2秒間隔でデータをファイルシステムに書きこむようになっているが、必要であればより安全なオプションを使用することもできる。デフォルト設定でシステムが完全に失敗した場合でも、失われるデータは数秒間分に限られる。

## レプリケーション（複製）
Redisはマスター・レプリカ・レプリケーションをサポートする。Redisサーバーのデータは、複数台のレプリカに複製できます。レプリカは、他のレプリカのマスターになることができます。これにより、Redisは単一ルートのレプリケーションツリーを実装できます。Redisのレプリカには書き込みを許可する設定も可能で、その場合インスタンス間の不整合を許容する形になる。Redisは出版-購読型モデル (Publish/Subscribe) を完全に実装しており、マスターで出版 (Publish) されたメッセージは、レプリカに接続して購読 (Subscribe) しているクライアントにも到達する。レプリケーションは、読込みの拡張性（書込みは除く）とデータの冗長性向上に有効である。

## 性能
データの永続性が必要ない場合において、Redisはメモリ上のみで動作することが可能であり、トランザクションのコミットごとにディスクへの書き込みが発生するデータベースと比べて性能的に優位である。Redisの操作はシングルスレッド上のシングルプロセスとして動作する。そのため、1つのRedisインスタンスでは例えばストアドプロシージャのように並列に処理を実行することはできない。

## クラスタリング

Redisプロジェクトはクラスター仕様を持っており、開発者のSanfilippoはRedis clusterの製品版ではキー空間の自動パーティショニングとホットリシャーディングをサポート、ただしシングルキー操作のみに対応、という投稿を行っている（β版が2013年末にリリース予定）。将来のバージョンでは、1000以上のノードをサポートし、と障害検知によりフォールトトレランスを実現、スレーブのマスターへの昇格、全ノードへの出版-購読モデルなどが構想されている。

## Redis Stack
Redis に加えて下記の物を加えた物を Redis Stack として配布している。これらのソフトウェアもソースアベイラブルで配布されている。
* RedisInsight - Redis のデータ内容を見られたりする管理ツール
* RedisJSON - JSONデータベース
* RediSearch - 全文検索、緯度経度検索、ベクトルデータベースによる類似文章検索など
* RedisTimeSeries - 時系列データベース
* RedisBloom - 確率分布の扱い

以下は、かつて Redis Stack に含まれていた物。
* RedisGraph - グラフデータベース。Cypherをクエリ言語として採用している。2023年7月5日にサポート終了が発表された。

以下は、かつて開発されていた物。Redis Stack にも含まれていない。
* RedisGears - Python, Java などの関数を Redis 上で実行する。
* RedisAI - 深層学習を Redis 上で実行する。TensorFlow, PyTorch, ONNX Runtime 等に対応。

## 関連項目

* NoSQL

## 脚注

## 外部リンク
*  
*  
* redisドキュメント日本語訳
* Redis Documentation (Japanese Translation)