Redis

データベース、キャッシュ、メッセージブローカー、キューとして使用できる高速のオープンソースインメモリデータストア

Redis とは?

Redis は、リモートディクショナリサーバー の略で、高速でオープンソースのメモリ内 key-value データストアです。このプロジェクトは、Redis の最初のデベロッパーである Salvatore Sanfilippo 氏が、イタリアのスタートアップのスケーラビリティを改善したいと考えていたときに始まりました。そこから、彼はデータベース、キャッシュ、メッセージブローカー、キューとして利用されている Redis を開発しました。

Redis は、ゲーム、アドテクノロジー、金融サービス、ヘルスケア、IoT の業界のリアルタイムアプリケーションでミリ秒未満の応答時間を実現し、1 秒間に数百万件のリクエストを処理できます。現在、Redis は最も人気のあるオープンソースエンジンの一つであり、 5 年連続で Stack Overflow では「最も愛されている」データベースに選ばれています。Redis は、その高速なパフォーマンスにより、キャッシング、セッション管理、ゲーム、リーダーボード、リアルタイム分析、地理空間、ライドヘイリング、チャット/メッセージング、メディアストリーミング、およびパブ/サブアプリケーションに広く使用されています。

AWS は、Redis を実行するための 2 つのフルマネージドサービスを提供しています。Amazon MemoryDB for Redis は、Redis と互換性があり、耐久性のあるインメモリデータベースサービスで、超高速なパフォーマンスを実現します。Amazon ElastiCache for Redis は、プライマリデータベースやデータストアからのデータアクセスをマイクロ秒単位のレイテンシーで高速化するフルマネージドキャッシングサービスです。さらに、ElastiCache は、もう一つの人気のあるオープンソースのキャッシングエンジンである Memcached のサポートも提供しています。

Amazon ElastiCache for Redis でアプリケーションをターボチャージすることについて詳しく知りたい場合は、このオンライン技術講演をチェックしてください。 

Redis の利点

パフォーマンス

すべての Redis データは、メモリ内に存在し、低レイテンシーと高スループットのデータアクセスを可能にします。従来のデータベースとは異なり、インメモリデータストアはディスクへのアクセスを必要とせず、エンジンレイテンシーをマイクロ秒にまで短縮します。このため、インメモリデータストアは、さらに多くのオペレーションをさらに速い応答時間でサポートできます。その結果、平均でミリ秒未満の読み書き操作という非常に高速なパフォーマンスを実現でき、1 秒間に数百万件の操作をサポートできます。

柔軟なデータ構造

データ構造が制限される他の key-value データストアとは異なり、Redis にはさまざまなデータ構造が用意されているため、アプリケーションのニーズを満たすことができます。Redis のデータタイプ:

  • Strings – 最大 512MB のテキストまたはバイナリデータ
  • Lists – 追加された順に並べられた文字列の集合
  • Sets – 順序なしの文字列の集合で他の Set 型と交差、和集合、差集合演算を行うことができる
  • Sorted Sets – 値ごとに並べられた Set
  • Hashes – フィールドと値のリストを保存するデータ構造
  • Bitmaps – ビットレベルの演算を実行できるデータタイプ
  • HyperLogLogs – データセット内の一意の項目を推定する確率的データ構造
  • Streams – ログデータ構造メッセージキュー
  • Geospatial – 経度/緯度ベースのエントリー マップ、「nearly」

シンプルで使いやすい

Redis を使えば、従来の複雑なコードを、より少ないシンプルな行数で作成可能です。Redis を使えば、アプリケーションでデータを保存、アクセス、使用するコードをより少ない行数で作成できます。Redis を使用するデベロッパーは、従来のデータベースのクエリ言語とは異なり、シンプルなコマンド構造を使用できるという違いがあります。例えば、Redis のハッシュデータ構造を使って、たった 1 行のコードでデータストアにデータを移動させることができます。Hash データ構造のないデータストアで同様のタスクを行うには、ある形式から別の形式に変換するために多くのコードを記述する必要があります。Redis には、データの操作とやり取りを実行するために、ネイティブのデータ構造と多くのオプションが用意されています。Redis デベロッパーが利用できるオープンソースクライアントは 100 を超えています。Java、Python、PHP、C、C++、C#、JavaScript、Node.js、Ruby、R、Go やその他多数の言語がサポートされています。

レプリケーションと永続性

Redis ではプライマリ/レプリカアーキテクチャが採用され、データを複数のレプリカサーバーに複製できる非同期レプリケーションに対応しています。これにより、読み取りパフォーマンスの向上 (リクエストが複数サーバーに分散される) と、プライマリサーバーが利用不能になった場合の迅速な復旧を実現できます。永続性については、Redis はポイントインタイムのバックアップをサポートしています (Redis データセットをディスクにコピーします)。

Redis は、耐久性があり一貫性のあるデータベースとして構築されていません。Redis と互換性のある耐久性のあるデータベースが必要な場合は、Amazon MemoryDB for Redis を検討してください。 MemoryDBは、複数のアベイラビリティーゾーン (AZ) にまたがってデータを保存する耐久性のあるトランザクションログを使用しているため、プライマリデータベースとして使用することができます。MemoryDB は、デベロッパーが個別のキャッシュやデータベース、基盤となるインフラストラクチャの管理を気にすることなく、Redis API を使用できるようにすることを目的として構築されています。

高可用性とスケーラビリティ

Redis では、単一ノードプライマリまたはクラスター化されたトポロジでプライマリ/レプリカアーキテクチャを構築できます。これにより、安定したパフォーマンスと信頼性を提供する可用性の高いソリューションを構築できます。クラスターのサイズを調整する必要がある場合は、スケールアップ、スケールインまたはスケールアウトするためのさまざまなオプションを利用できます。これにより、需要に応じてクラスターを拡張できます。

オープンソース

Redis は、AWS をはじめとする活発なコミュニティによってサポートされているオープンソースプロジェクトです。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 言語サポート

Redis では、以下のような主要なプログラミング言語とプロトコルをサポートしています:

Python

Java

PHP

Redis とMemcached

Redis と Memcached は、どちらもインメモリのオープンソースデータストアです。高性能分散メモリキャッシュサービスの Memcached は、シンプルに、また Redis は幅広いユースケースに対して効果的であるように、豊富な機能をお届けできるように作られています。決断するためのより詳細な機能比較については、Redis 対 Memcached をご覧ください。 MySQL、PostgreSQL、Aurora、Oracle、SQL Server、DynamoDB などのリレーショナルデータベースまたは key-value データベース と連携してパフォーマンスを向上させます。

AWS での Redis の利用

AWS は、Redis と互換性のある 2 つのフルマネージドサービスを提供しています。Amazon MemoryDB for Redis と Amazon ElastiCache for Redis です。

Amazon MemoryDB for Redis

Amazon MemoryDB for Redis は、Redis と互換性があり、耐久性のあるインメモリデータベースサービスで、超高速なパフォーマンスを実現します。これは、マイクロサービスアーキテクチャで作成されたモダンアプリケーション用に構築されています。Amazon MemoryDB は、マルチ AZ トランザクションログを使用して、複数のアベイラビリティーゾーン (AZ) にわたってデータを永続的に保存し、高速なフェイルオーバー、データベースリカバリ、およびノードの再起動を可能にします。Amazon MemoryDB では、すべてのデータがメモリ内に保存されるため、マイクロ秒の読み取りと 1 桁ミリ秒の書き込みのレイテンシーと高いスループットを実現できます。 

Amazon MemoryDB for Redis の詳細については、MemoryDB ドキュメントをチェックしてください。

Amazon ElastiCache for Redis

Amazon ElastiCache for Redis は、フルマネージドキャッシュサービスであり、クラウド上でのキャッシュの設定、運用、スケールを容易にします。ElastiCache for Redis を使えば、プライマリデータベースやデータストアからのデータをキャッシングすることで、アプリケーションのスピードを加速し、マイクロ秒単位の読み取り/書き込みレイテンシーを解除することができます。ElastiCache for Redis は、AWS 無料利用枠での無料トライアルが可能です。 

Amazon ElastiCache for Redis

サインアップ

Amazon ElastiCache for Redis の詳細を見る

Amazon ElastiCache の使用を開始する

ElastiCache for Redis の使用開始

Amazon MemoryDB を利用して構築を開始する

ユーザーガイドでのヘルプで構築を開始する。