Redis

Redisは、ネットワーク接続された永続化可能なインメモリデータベース。連想配列（キー・バリュー）、リスト、セットなどのデータ構造を扱える。いわゆるNoSQLデータベースの一つ。オープンソースソフトウェアプロジェクトであり、がスポンサーとなって開発されている。
歴史.
Redisの名称はを意味している。元々の開発者はVMware所属（2010年3月当時）のエンジニアSalvatore Sanfilippoである。2013年5月からは、RedisはVMwareをスピンオフしたにスポンサーされるようになった。2015年6月からは、がスポンサーとなっている。
DB-Engines.comの月間ランキングでは、Redisはしばしば最もポピュラーなとして評されている。また、Redisは2015年のユーザーレビューによる満足度と市場でのプレゼンスの評価でNoSQLデータベースで4位を、Docker等の各種コンテナ上で使われているNoSQLデータベースとして1位を、さらに上位50デベロッパーツール&サービスにおけるNoSQLデータベースとしても1位を獲得している。
対応するプログラミング言語.
以下のような数多くのプログラミング言語からの使用が可能である。
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 と呼んでいるが、特に文字の使用だけに限った物ではない。
値のデータタイプは、各タイプごとに用意された操作（コマンド）で決定される。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 として配布している。
Redis Stack には含まれていない関連プロジェクトとして以下のものがある。