Redis の最も一般的な 5 つのアプリケーション シナリオ

Redis は現在最も人気のあるインメモリ データベースとして、サーバー側の高速化に必要なツールの 1 つとなっています。Redis はなぜそれほど速いのでしょうか? そして、なぜ Redis はシングルスレッドを使用しているのに、より高いパフォーマンスを実現するのかという疑問ですが、なぜ以前のRedis はそれほど速かったのでしょうか? こちらの記事でも紹介されています。

今日は、この記事を通じて、Redis の最も一般的な 5 つのアプリケーション シナリオを見ていきます。動画で学習できます。動画で見るのが面倒な方はテキストコンテンツでも学習できます。テキスト部分ではより簡潔にまとめられています。

キャッシュ

Redis の最初のアプリケーション シナリオは、Web アプリケーションへのアクセスを高速化するためのキャッシュ オブジェクトとして Redis を使用することです。

このシナリオでは、データベースに格納されている一部のデータが頻繁にアクセスされるため、データベースへのアクセスが頻繁になるとデータベースの負荷が増加し、同時にデータベースの IO が遅いため、アプリケーションの応答が悪くなります。このとき、これらの頻繁にアクセスされるデータを保存するために Redis を導入すると、データベースの負荷が効果的に軽減され、アプリケーションのリクエスト応答が向上します。

セッションストレージ(セッション)

Redis を使用してセッション データを保存すると、ステートレス サーバー間でユーザー関連の状態データを共有できます。

ユーザーが Web アプリケーションにログインすると、セッション データが Redis に保存され、一意のセッション ID (セッション ID) がクライアントのCookieに返されます。ユーザーがアプリケーションにリクエストを送信すると、このセッション ID がリクエストに含まれます。ステートレス Web サーバーは、さらにリクエストを処理するために、このセッション ID に基づいて Redis から関連するセッション データを検索します。

ここで注意する必要があるのは、単一インスタンスのデプロイメントが使用されている場合、Redis はインメモリ データベースであるということです。その後、Redis サーバーに障害が発生して再起動すると、すべてのセッション セッションが消失し、ユーザーは新しいセッションを取得するために再度ログインする必要があります。したがって、Redis を使用してセッションを保存する場合は、マスター/スレーブ クラスター モードでデプロイすることをお勧めしますこのようにして、メイン サーバーがハングアップした場合でも、スレーブ データベースがトラフィックをすぐに引き継ぐため、ユーザーの使用には影響しません。

分散ロック

アプリケーションに複数のノードをデプロイする場合、これらのノードが同じリソースを操作する必要がある場合、競合が発生します。現時点では、Redis を分散ロックとして使用して、共有リソース上の複数のノードの操作を調整できます。

SETNXここでは主に、キーが存在しない場合にのみキーを設定できるRedis アトミック操作コマンドを使用します。

以下の図は、簡単な使用例を示しています。クライアント 1 は、SETNXコマンドを使用してロックを作成しようとします1234abcdキーが現在存在しない場合は、1 が返されます。クライアント 1 はロックを取得すると、共有リソースに対する操作を実行できるようになり、操作が完了したら、作成したばかりのロックを削除します (分散ロックを解放します)。コマンドの実行時にクライアント 1 がSETNX0 を返した場合は、別のクライアントがこのキーを占有していることを意味するため、しばらく待ってから (他のノードがキーを解放するのを待って)、再試行してください。

上記の単純な実装は多くのユースケースを満足させることができますが、優れたフォールト トレランス メカニズムを備えていません。運用環境で使用する場合は、高品質の分散ロック実装を使用することをお勧めします。たとえば、Java プラットフォームの場合は、「Redisson」を選択できます。

レートリミッター

Redis にはカウンター機能が用意されているため、この機能とタイムアウトを使用してレート リミッターを実装できます。最も一般的なシナリオは、サーバーがリクエスト電流制限を使用することです。

基本的な速度制限の実装は次のとおりです。

ユーザー ID または IP をキーとして使用し、INCRコマンドを使用してユーザー リクエストの数を記録します。そして、リクエスト数と許可されるリクエストの上限値を比較し、制限値を下回った場合にのみリクエスト処理を実行します。制限を超えると、リクエストは拒否されます。

同時に、リクエスト数のカウンターを 1 分などの時間枠で設定する必要があります。つまり、1 分以内にカウンターがクリアされ、再度カウントされます。したがって、ある時間枠内で電流が制限されている場合、要求は次の時間枠で再開できます。レート制限効果を達成するため。

タイム ウィンドウ アルゴリズムに加えて、リーキー バケット アルゴリズムも Redis を通じて実装できます。

ランキング/リーダーボード

RedisはSorted Setsの機能を提供しているため、多くのゲームアプリがRedisを利用して様々なランキング機能を実装しています。

ソートされたセット

ソートされたコレクションは、一意の要素 (例: ユーザー ID) のコレクションであり、各要素はスコアによってソートされているため、スコアによって要素をすばやく取得できます。

まとめ

Redis には幅広い用途がありますが、ここでは一般的な使用法の一部のみを要約します。さらに、ビジネス シナリオに応じて、興味深いアプリケーションが多数あります。誰もが 1 つの例から推論を導き出すことができます。

普段 YouTube で最先端の動画を視聴している場合は、Youtube 中国語吹き替えをインストールすることもでき、学習効率を効果的に向上させることができます。ネットワーク上の理由でこれらのコンテンツを閲覧することが不便な場合は、私のビデオ アカウント「Programmer DD」またはBilibili チャンネルをフォローしてください。私が毎日見る最高の学習教材の一部を頻繁に共有します。興味のある友人は、毎日の習慣をフォローできます。購読することを選択するだけです。

私の公開アカウント、プログラマー DD をフォローしてください。最先端の技術を知っていれば、カーブでの追い越しも期待できるはず!追い抜き資金を貯めるにはDDに注目することから始めましょう!

おすすめ

転載: blog.csdn.net/dyc87112/article/details/133532866