Redis とは
Redis は、データベース、キャッシュ、メッセージブローカー、キューとして使用できるオープンソースの高速インメモリ型 key-value データストアです。ゲーム、アドテクノロジー、金融サービス、医療、IoT の分野のリアルタイムアプリケーションでミリ秒未満の応答時間を実現し、1 秒間に数百万件のリクエストを処理できます。Redis は、キャッシュ、セッション管理、リアルタイム分析、地理空間、チャットとメッセージング、メディアストリーミング、ゲームのリーダーボードでよく利用されています。
Redis の仕組み
データをディスクや SSD に保存するデータベースとは異なり、Redis のデータはメモリ内に保存されます。Redis のようなインメモリデータストアでは、ディスクにアクセスする必要がないため、シークタイムの遅延はなく、マイクロ秒単位でデータにアクセスできます。Redis は、柔軟性に優れたデータ構造、高可用性、地理空間、Lua スクリプト、トランザクション、オンディスクの永続性、クラスターサポートといった機能に対応しているため、リアルタイムのインターネット規模のアプリケーション構築がさらに簡単になります。
完全マネージド型の Redis で、暗号化、オンラインでのクラスターサイズ変更、高可用性、コンプライアンスを実現。詳細
Redis の利点
インメモリデータストア
PostgreSQL、Cassandra、MongoDB など、ほとんどのデータをディスクまたは SSD に保存するデータベースとは異なり、Redis のすべてのデータはサーバーのメインメモリに保存されます。ほとんどのオペレーションがディスクへの往復を必要とする渋滞のディスクベースのデータベースと比較すると、Redis などのインメモリデータストアは同じ問題を抱えることはありません。そのため、1 桁多いオペレーションとより速い応答時間をサポートしています。その結果、平均でミリ秒未満の読み書き操作という非常に高速なパフォーマンスを実現でき、1 秒間に数百万件の操作をサポートできます。
柔軟なデータ構造
データ構造が制限される単純なキー値データストアとは異なり、Redis にはさまざまなデータ構造が用意されているため、アプリケーションのニーズを満たすことができます。Redis のデータタイプ:
- Strings – 最大 512MB のテキストまたはバイナリデータ
- Lists – 追加された順に並べられた文字列の集合
- Sets – 順序なしの文字列の集合で他の Set 型と交差、和集合、差集合演算を行うことができる
- Sorted Sets – 値ごとに並べられた Set
- Hashes – フィールドと値のリストを保存するデータ構造
- Bitmaps – ビットレベルの演算を実行できるデータタイプ
- HyperLogLogs – データセット内の一意の項目を推定する確率的データ構造
シンプルで使いやすい
Redis では、アプリケーションでデータを保存、アクセス、使用するコードをより少ない行数で作成できるため、コードがシンプルになります。例えば、HashMap に保存されているデータがアプリケーションにあり、そのデータをデータストアに保存する場合、Redis の Hash データ構造を使用して、簡単にそのデータを保存できます。Hash データ構造のないデータストアで同様のタスクを行うには、ある形式から別の形式に変換するために多くのコードを記述する必要があります。Redis には、データの操作とやり取りを実行するために、ネイティブのデータ構造と多くのオプションが用意されています。Redis 開発者が利用できるオープンソースクライアントは 100 を超えています。Java、Python、PHP、C、C++、C#、JavaScript、Node.js、Ruby、R、Go やその他多数の言語がサポートされています。
レプリケーションと永続性
Redis ではプライマリ/レプリカアーキテクチャが採用され、データを複数のレプリカサーバーに複製できる非同期レプリケーションに対応しています。これにより、読み取りパフォーマンスの向上 (リクエストが複数サーバーに分散される) と、プライマリサーバーが利用不能になった場合の迅速な復旧を実現できます。永続性については、Redis はポイントインタイムのバックアップをサポートしています (Redis データセットをディスクにコピーします)。
高可用性とスケーラビリティ
Redis では、単一ノードプライマリまたはクラスター化されたトポロジでプライマリ/レプリカアーキテクチャを構築できます。これにより、安定したパフォーマンスと信頼性を提供する可用性の高いソリューションを構築できます。クラスターのサイズを調整する必要がある場合は、スケールアップ、スケールインまたはスケールアウトするためのさまざまなオプションを利用できます。これにより、需要に応じてクラスターを拡張できます。
拡張性
Redis は、活発なコミュニティによってサポートされているオープンソースプロジェクトです。Redis はオープン標準ベースで、オープンデータ形式をサポートしており、豊富なクライアントを特徴としているため、ベンダーや技術的なロックインはありません。
Redis の一般的なユースケース
キャッシュ
Redis は、可用性の高いインメモリキャッシュを実装して、データアクセスレイテンシーの減少、スループットの向上、リレーショナルデータベースや NoSQL データベースおよびアプリケーションの負荷軽減を実現する優れた方法です。Redis では、頻繁にリクエストされるアイテムをミリ秒未満の応答時間で提供でき、バックエンドのコストを増大させることなく、負荷の増大に対応して簡単にスケールすることができます。データベースクエリ結果のキャッシング、永続的なセッションのキャッシング、ウェブページのキャッシング、画像、ファイル、メタデータなどの頻繁に使用されるオブジェクトのキャッシングはすべて、Redis を使用したキャッシングの一般的な例です。
チャット、メッセージング、キュー
Redis では、パターンマッチングを備えた Pub/Sub と List、Sorted Set、Hash などのさまざまなデータ構造がサポートされています。これにより、Redis では高性能のチャットルーム、リアルタイムのコメントストリーム、ソーシャルメディアフィード、サーバー間通信などをサポートできます。Redis の List データ構造を使えば、軽量のキューを簡単に実装できます。List ではブロッキング機能に加えてアトミック操作が提供されているため、信頼性の高いメッセージブローカーや循環リストを必要とするさまざまなアプリケーションに適しています。
ゲームのリーダーボード
Redis は、リアルタイムのリーダーボードを構築するためにゲーム開発者によってよく利用されています。Redis の Sorted Set データ構造を使用すれば、ユーザーのスコア順に並べらえたリストを保持している間に一意の要素を提供します。リアルタイムのランキングリストを作成することは、ユーザーのスコアが変わるごとに更新することと同じほど簡単です。タイムスタンプをスコアとして使用すれば、Sorted Set で時系列データを扱うこともできます。
セッションストア
Redis は高可用性と永続性を備えたインメモリデータストアであるため、インターネット規模のアプリケーションのセッションデータを保存および管理するためにアプリケーション開発者によってよく利用されています。Redis は、ユーザープロファイル、認証情報、セッション状態、ユーザー固有のパーソナライズなどのセッションデータを管理するために必要とされるミリ秒未満のレイテンシー、スケール、弾力性を備えています。
リッチメディアストリーミング
Redis は高速のインメモリデータストアで、ライブストリーミングのユースケースで力を発揮します。Redis を使用すると、ユーザープロファイルと表示履歴のメタデータ、数百万人のユーザーの認証情報やトークン、CDN で同時に数百万人のモバイルユーザーとデスクトップユーザーに動画をストリーミング配信するためのマニフェストファイルを保存できます。
地理空間:
Redis には、専用のインメモリデータ構造と演算子が用意されているため、大規模なリアルタイムの地理空間データを迅速に管理できます。地理空間データをリアルタイムで保存、処理、分析するための GEOADD、GEODIST、GEORADIUS、GEORADIUSBYMEMBER などのコマンドが用意されているため、Redis では地理空間データを簡単かつ高速に処理できます。Redis を使用して、運転時間、運転距離、重要地点 (POI) などの位置情報に基づく機能をアプリケーションに追加できます。
Machine Learning
最新のデータ駆動型アプリケーションでは、機械学習を使用して、量、種類、速度が増大しているデータをすばやく処理し、意思決定を自動化する必要があります。ゲームや金融サービスでの不正検出、アドテクノロジーでのリアルタイム入札、出会いサービスやライドシェアでのマッチメイキングなどのユースケースでは、数十ミリ秒以内にライブデータを処理して意思決定を行えることが最も重要です。Redis は高速のインメモリデータストアであるため、機械学習モデルを迅速に構築、トレーニング、デプロイできます。
リアルタイム分析
Redis は、Apache Kafka、Amazon Kinesis などのストリーミングソリューションでインメモリデータストアとして使用し、リアルタイムのデータの取り込み、処理、分析をミリ秒未満のレイテンシーで行うことができます。Redis は、ソーシャルメディア分析、広告のターゲティング、パーソナライズ、IoT などのリアルタイム分析のユースケースに最適です。
言語のサポート
Redis では、以下のような主要なプログラミング言語とプロトコルをサポートしています。
Python
Java
PHP
Perl
Go
Ruby
C/C#/C++
JavaScript
Node.js