ホームページ  >  記事  >  データベース  >  同時リクエストを防ぐための Redis アトミックカウンターの増加について

同時リクエストを防ぐための Redis アトミックカウンターの増加について

藏色散人
藏色散人転載
2020-09-28 15:13:022705ブラウズ

次のコラム Redis チュートリアル では、同時リクエストを防ぐための Redis アトミック カウンター incr について紹介します。 #######################################I.はじめに######## #フラッシュ セール活動など、大量の同時リクエストに制限がある一部のシステムや機能、または返される現在のユーザー数が多すぎる Web サイトでは、後でもう一度お試しください。これらは同時にリクエストの数を制限し、通常はバックグラウンド システムを保護し、過剰なトラフィックの影響によるシステムのクラッシュを防ぐために使用されます。システムクラッシュの結果に関しては、メンテナにとっては、一部のリクエストを拒否する方が明らかに受け入れられます。

あらゆる種類の電流制限の中でも、システム自身で設計したロック機構を備えたカウンターに加えて、Redis を使用して実装することが効率的で安全かつ便利な方法であることは明らかです。

同時リクエストを防ぐための Redis アトミックカウンターの増加について

2. Incr コマンド

Redis Incr コマンドは、key に格納されている数値を 1 つ増やします。 key が存在しない場合は、まず key の値が 0 に初期化されてから、INCR 演算が実行されます。 値に間違った型が含まれている場合、または文字列型の値が数値として表現できない場合は、エラーを返します。 この演算の値は、64 ビット (ビット) の符号付きデジタル表現に制限されます。

例:

127.0.0.1:6379> set num 10
OK
127.0.0.1:6379> incr num
(integer) 11
127.0.0.1:6379> get num    # 数字值在 Redis 中以字符串的形式保存
"11"
注: Redis には整数データを表す明示的な型がないため、この操作は文字列操作です。

この操作を実行すると、キーに対応して格納された文字列が 10 進数の 64 ビット符号付き整数データに解析されます。
実際、Redis は内部的に整数表現 (整数表現) を使用して対応する整数値を格納するため、このタイプの文字列値は実際には整数に格納され、整数を格納するための文字列表現 (文字列表現) はありません。引き起こされた。

3. 使用シナリオ


1. カウンター


使用方法のアイデアは、関連する操作があるたびに、 incr コマンドを Redis サーバーに送信します。

たとえば、これはシナリオです。Web アプリケーションがあり、各ユーザーが毎日この Web サイトにアクセスする回数を記録したいと考えています。

Web アプリケーションは、ユーザー ID と現在時刻を表す文字列をキーとして連結し、ユーザーがこのページにアクセスするたびにこのキーに対して incr コマンドを実行するだけで済みます。

このシナリオには多くの拡張メソッドを含めることができます。

INCR コマンドと EXPIRE コマンドを組み合わせることで、指定された間隔内のユーザーの訪問数のみを記録するカウンターを実装できます。
クライアントは次のことができます。 pass GETSET コマンドは現在のカウンタ値を取得し、それを 0 にリセットします

DECR や INCRBY などのアトミックな増減コマンドにより、ユーザーの操作に応じて特定の値を増減させることができます。 、ユーザーのゲーム スコアを計算する必要があります。リアルタイム制御では、スコアが増減する可能性があります。

2. 速度リミッター

速度リ​​ミッターは、特定の操作の実行速度を制限できる特別なシナリオです。 従来の例は、特定のパブリック API に対するリクエストの数を制限することです。

次の問題を解決したいとします。API の IP ごとのリクエスト数を 1 秒あたり 10 回以下に制限します。

この問題は、incr コマンドを使用する 2 つの方法で解決できます。

4. フロー制御の Java 実装



ここでは、Java の redis-incr の特性を利用して、1 分間に 100 リクエストのみを許可する制御を構築します。コード、キーは、redis に格納されている制御されたキーの値を表します。
rreeee

以上が同時リクエストを防ぐための Redis アトミックカウンターの増加についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcsdn.netで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。