Redis 6:高速データベース、キャッシュ、メッセージブローカー

多くの場合と同様に、Redisを単なるキャッシュと考えるかもしれません。その視点は時代遅れです。

基本的に、Redisはディスク上に永続化できるNoSQLインメモリデータ構造ストアです。データベース、キャッシュ、およびメッセージブローカーとして機能できます。Redisには、レプリケーション、Luaスクリプト、LRUエビクション、トランザクション、およびさまざまなレベルのオンディスク永続性が組み込まれています。RedisSentinelおよびRedisClusterによる自動パーティショニングを介して高可用性を提供します。

コアRedisデータモデルはKey-Valueですが、文字列、リスト、セット、並べ替えられたセット、ハッシュ、ストリーム、HyperLogLogs、ビットマップなど、さまざまな種類の値がサポートされています。Redisは、半径クエリとストリームを使用した地理空間インデックスもサポートしています。

[また、Redisがどのようにかゆみを感じ、データベースを永久に変更したか]

オープンソースのRedisに、Redis Enterpriseは、速度、信頼性、柔軟性を高める機能と、サービスとしてのクラウドデータベースを追加します。Redis Enterpriseは、1秒あたり数億の操作に直線的に拡張し、ローカルレイテンシーを備えたアクティブ-アクティブなグローバル分散を備え、ディスクベースのデータベースのインフラストラクチャコストで大規模なデータセットをサポートするRedis on Flashを提供し、構築に基づいて99.999%の稼働時間を提供します-耐久性と1桁秒のフェイルオーバー。

さらに、Redis EnterpriseはコアRedis機能を拡張して、RediSearch、RedisGraph、RedisJSON、RedisTimeSeries、RedisAIなどのモジュールを使用したデータモデリング方法をサポートし、モジュールとコアの間で操作を実行できるようにします。これはすべて、データベースの待ち時間を1ミリ秒未満に保ちながら提供されます。

コアRedisの機能とユースケース

Redisがデータベース、キャッシュ、メッセージブローカーとして機能できるようになったとはどういう意味ですか?そして、それらの役割がサポートするユースケースは何ですか?

キャッシュはRedisの古典的な機能です。基本的に、Redisはディスクベースのデータベースの前に配置され、クエリと結果を保存します。アプリケーションは、最初にRedisキャッシュで保存された結果をチェックし、ディスクベースのデータベースに現在キャッシュにない結果を照会します。Redisのサブミリ秒の応答率を考えると、これは通常、アプリケーションのパフォーマンスにとって大きなメリットです。Redisキャッシュからの有効期限タイマーとLRU(最近使用されていない)の削除は、キャッシュを最新の状態に保ち、メモリを効果的に使用するのに役立ちます。

セッションストアは、最新のWebアプリケーションの重要な部分です。これは、ユーザーとユーザーのアプリケーションとの対話に関する情報を保持するのに便利な場所です。 Webファームアーキテクチャでは、セッションストアをWebサーバーで直接ホストするには、ユーザーが将来の要求のために同じバックエンドサーバーに「固執」する必要があり、ロードバランサーが制限される可能性があります。セッションストアにディスクベースのデータベースを使用すると、セッションを単一のWebサーバーにバインドする必要がなくなりますが、待ち時間の原因が追加されます。セッションストアとしてRedis(またはその他の高速インメモリデータベース)を使用すると、多くの場合、低遅延、高スループットのWebアプリケーションアーキテクチャが実現します。

Redisは、3つの異なるメカニズムを使用してメッセージブローカーとして機能できます。メッセージブローカーとしてのRedisの重要なユースケースの1つは、マイクロサービス間の接着剤として機能することです。 Redisには、ファイアアンドフォーゲットメッセージを容易にする低オーバーヘッドのパブリッシュ/サブスクライブ通知メカニズムがありますが、宛先サービスがリッスンしていない場合は機能しません。より永続的なKafkaのようなメッセージキューの場合、Redisはストリームを使用します。ストリームは、単一のキーでタイムスタンプ順に並べられたキーと値のペアです。 Redisは、単一のキーに格納されている要素の二重リンクリストもサポートしています。これは、先入れ先出し(FIFO)キューとして役立ちます。マイクロサービスは、Redisをキャッシュとして使用することも、メッセージブローカーとして使用することもできますが、キャッシュはメッセージキューとは別のRedisインスタンスで実行する必要があります。

基本的なレプリケーションにより、RedisEnterpriseバージョンのクラスターテクノロジーを使用せずにRedisを拡張できます。Redisレプリケーションは、デフォルトで非同期であるリーダーフォロワーモデル(マスタースレーブとも呼ばれます)を使用します。クライアントはWAITコマンドを使用して同期レプリケーションを強制できますが、それでもRedisはレプリカ間で一貫性がありません。

Redisにはサーバー側のLuaスクリプトがあり、プログラマーはCモジュールやクライアント側のコードを記述せずにデータベースを拡張できます。基本的なRedisトランザクションを使用すると、クライアントは、MULTIコマンドとEXECコマンドを使用してシーケンスを定義および実行し、コマンドのシーケンスを中断できないユニットとして宣言できます。これは、ロールバックを使用したリレーショナルトランザクションと同じではありません

Redisには、ユーザーが選択できるさまざまなレベルのディスク上の永続性があります。RDB(Redisデータベースファイル)の永続性は、指定された間隔でデータベースのポイントインタイムスナップショットを取得します。AOF(追加専用ファイル)永続性は、サーバーが受信したすべての書き込み操作をログに記録します。データの安全性を最大化するために、RDBとAOFの両方の永続性を使用できます。

Redis Sentinelは、それ自体が分散システムであり、Redisに高可用性を提供します。マスターインスタンスとレプリカインスタンスの監視、問題が発生した場合の通知、マスターが機能しなくなった場合の自動フェイルオーバーを実行します。また、クライアントの構成プロバイダーとしても機能します。

Redisクラスターは、データが複数のRedisノード間で自動的にシャーディングされるRedisインストールを実行する方法を提供します。Redis Clusterは、パーティション中にある程度の可用性も提供しますが、マスターの大部分が使用できなくなると、クラスターは動作を停止します。

前述したように、Redisは、文字列、リスト、セット、並べ替えられたセット、ハッシュ、ストリーム、HyperLogLogs、およびビットマップを値としてサポートするKey-Valueストアです。最も単純で最も一般的な使用例の1つは、カウンターとして整数値を使用することです。これをサポートするために、INCR(インクリメント)、DECR(デクリメント)、およびその他の単一操作はアトミックであるため、マルチクライアント環境で安全です。Redisでは、キーが操作されると、キーがまだ存在しない場合は自動的に作成されます。

> SET接続10

OK

> INCR接続

(整数)11

> INCR接続

(整数)12

> DEL接続

(整数)1

> INCR接続

(整数)1

> INCRBY接続100

(整数)101

> DECR接続

(整数)100

> DECRBY接続10

(整数)90

他の種類の値構造にも、TryRedisチュートリアルに独自の例があります。私が自分で試したとき、チュートリアルはメンテナンス中だった。Redis Labsが元々コミュニティの取り組みに関与するようになったため、まもなく修正されることを期待しています。

Redisには、ニューラルネットワークモジュール、全文検索、SQL、JSONデータ型、グラフデータベースなど、多数のアドオンモジュールがあります(人気の高い順に)。モジュールのライセンスは作成者によって設定されます。Redisで動作するモジュールの一部は、主にRedisEnterprise用のモジュールです。

RedisEnterpriseの機能強化

シェアードナッシングクラスターアーキテクチャを使用するRedisEnterpriseは、スケールアウトされたアーキテクチャに非線形オーバーヘッドを課すことなく、無限の線形スケーリングを実現します。マルチコアコンピューターアーキテクチャを最大限に活用するために、単一のクラスターノードに複数のRedisインスタンスをデプロイできます。 Redis Enterpriseは、ファイブナイン(99.999%)の稼働時間で、1秒あたり数億回の操作に拡張できることを実証しています。 Redis Enterpriseは、トランザクションの負荷に対して低遅延と高スループットを維持しながら、自動リシャーディングとリバランスを実行します。

Redis Enterpriseは、グローバルに分散されたデータベースのアクティブ-アクティブ展開を提供し、複数の地理的場所にまたがる同じデータセットでの同時読み取りおよび書き込み操作を可能にします。これをより効率的にするために、Redis Enterpriseは競合のないレプリケートされたデータ型(CRDT)を使用して、データの一貫性と可用性を維持できます。RiakとAzureCosmos DBは、CRDTをサポートする他の2つのNoSQLデータベースです。

CRDTに関する広範な学術文献がありますが、CRDTがどのようにまたはなぜ機能するのかを完全には理解していないことを認めます。それらが行うことの簡単な要約は、CRDTは、数学的に導出された一連のルールを使用して、介入なしで不整合を解決できるということです。CRDTは、共有状態を必要とする大量のデータに役立ち、地理的に分散したサーバーを使用してユーザーの待ち時間を短縮できます。

RedisとRedisEnterpriseの主な違いの1つは、RedisEnterpriseがデータパスをクラスター管理から切り離していることです。これにより、両方のコンポーネントの動作が向上します。データパスは、システムの根本的な複雑さを隠すために、各クラスターノードに存在する複数のゼロレイテンシーのマルチスレッドプロキシに基づいています。クラスターマネージャーは、再シャーディング、リバランス、自動フェイルオーバー、ラック認識、データベースプロビジョニング、リソース管理、データ永続化構成、バックアップとリカバリなどの機能を提供する管理機能です。クラスターマネージャーはデータパスコンポーネントから完全に分離されているため、ソフトウェアコンポーネントを変更しても、データパスコンポーネントには影響しません。

Redis on Flashは、Redisのハードウェアのコストを大幅に削減できるRedisEnterpriseの機能です。テラバイトのRAMにお金を払ったり、Redisデータセットのサイズを制限したりする代わりに、Redis on Flashを使用して、頻繁にアクセスされるホットデータをメモリに配置し、コールド値をフラッシュまたはIntel OptaneDCなどの永続メモリに配置できます。

Redis Enterpriseモジュールには、RedisGraph、RedisJSON、RedisTimeSeries、RedisBloom、RediSearch、およびRedisGearsが含まれます。すべてのRedisEnterpriseモジュールは、オープンソースのRedisでも動作します。

Redis 6の新機能は何ですか?

Redis 6は、オープンソースバージョンとRedisEnterprise商用バージョンの両方の大きなリリースです。パフォーマンスのニュースは、スレッドI / Oの使用です。これにより、Redis6の速度がRedis5の2倍に向上します(これは前屈みではありませんでした)。これはRedisEnterpriseに引き継がれ、上記のようにクラスターの速度がさらに向上します。

アクセス制御リスト(ACL)の追加により、Redis 6にユーザーの概念が与えられ、開発者はより安全なコードを記述できるようになります。Redis Enterprise 6はACLに基づいて構築されており、プログラマーやDBAにとってより便利なロールベースのアクセス制御(RBAC)を提供します。

Redis6の主な新機能

Redis6.0オープンソース

  • アクセス制御リスト(ACL)
  • 立ち退きの改善
  • スレッドI / O
  • RESP3プロトコル

Redis Enterprise 6.0

  • 役割ベースのアクセス制御(RBAC)
  • アクティブ-アクティブの拡張
  • HyperLogLog
  • ストリーム

Redis Enterprise 6.0は、アクティブ-アクティブデータベースのStreamsデータ型のサポートを追加します。これにより、地理的に複数の場所にある複数のデータセンターでリアルタイムストリームの読み取りと書き込みを同時に実行しながら、高可用性と低遅延の両方が可能になります。

RedisGearsは、開発者がRedisでデータフローを実装する関数を記述および実行できるようにする動的フレームワークです。これにより、ユーザーはPythonスクリプトを記述してRedis内で実行でき、ライトビハインド(Redisはディスクベースのデータベースのフロントエンドとして機能します)、リアルタイムデータ処理、ストリーミングとイベント処理、操作など、さまざまなユースケースが可能になります。データ構造とモデル、およびAI主導のトランザクションを横断します。

RedisAIは、Redis内で実行されるモデルサービングエンジンです。PyTorch、TensorFlow、およびONNXモデルで推論を実行できます。RedisAIはCPUとGPUで実行でき、不正検出、異常検出、パーソナライズなどのユースケースを可能にします。

Redisのインストール

Redisをインストールするには、ソースtarballをダウンロードしてコンパイルするか、DockerHubからDockerイメージをプルします。Redisは、Linux、MacOS、OpenBSD、NetBSD、およびFreeBSDでコンパイルして使用できます。ソースコードリポジトリはGitHubにあります。Windowsでは、Dockerコンテナー内、またはWindows10を必要とするWindowsSubsystem for Linux(WSL)の下でRedisを実行できます。

LinuxまたはDockerコンテナにRedisEnterpriseをインストールできます。Linuxのダウンロードは、バイナリパッケージ(Linuxのフレーバーに応じてDEBまたはRPM)およびクラスターインストール用のBashシェルスクリプトの形式で提供されます。スクリプトは、インストールに必要な4つのコアと15GBのRAMをチェックします。

Redis Enterprise Cloud

Redis Enterpriseをインストールする最も速い方法は、まったくインストールするのではなく、Redis EnterpriseCloudで実行することです。レビューの目的でこれを自分で試したとき、最初にRedis5インスタンスを受け取りました。Redis6へのアップグレードを依頼する必要がありました。