次のコラム Redis チュートリアル では、同時リクエストを防ぐための Redis アトミック カウンター incr について紹介します。 #######################################I.はじめに######## #フラッシュ セール活動など、大量の同時リクエストに制限がある一部のシステムや機能、または返される現在のユーザー数が多すぎる Web サイトでは、後でもう一度お試しください。これらは同時にリクエストの数を制限し、通常はバックグラウンド システムを保護し、過剰なトラフィックの影響によるシステムのクラッシュを防ぐために使用されます。システムクラッシュの結果に関しては、メンテナにとっては、一部のリクエストを拒否する方が明らかに受け入れられます。
あらゆる種類の電流制限の中でも、システム自身で設計したロック機構を備えたカウンターに加えて、Redis を使用して実装することが効率的で安全かつ便利な方法であることは明らかです。 2. 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"
この操作を実行すると、キーに対応して格納された文字列が 10 進数の 64 ビット符号付き整数データに解析されます。
実際、Redis は内部的に整数表現 (整数表現) を使用して対応する整数値を格納するため、このタイプの文字列値は実際には整数に格納され、整数を格納するための文字列表現 (文字列表現) はありません。引き起こされた。
3. 使用シナリオ
1. カウンター
使用方法のアイデアは、関連する操作があるたびに、 incr コマンドを Redis サーバーに送信します。
Web アプリケーションは、ユーザー ID と現在時刻を表す文字列をキーとして連結し、ユーザーがこのページにアクセスするたびにこのキーに対して incr コマンドを実行するだけで済みます。
INCR コマンドと EXPIRE コマンドを組み合わせることで、指定された間隔内のユーザーの訪問数のみを記録するカウンターを実装できます。
クライアントは次のことができます。 pass GETSET コマンドは現在のカウンタ値を取得し、それを 0 にリセットします
2. 速度リミッター
速度リミッターは、特定の操作の実行速度を制限できる特別なシナリオです。 従来の例は、特定のパブリック API に対するリクエストの数を制限することです。
次の問題を解決したいとします。API の IP ごとのリクエスト数を 1 秒あたり 10 回以下に制限します。 この問題は、incr コマンドを使用する 2 つの方法で解決できます。
ここでは、Java の redis-incr の特性を利用して、1 分間に 100 リクエストのみを許可する制御を構築します。コード、キーは、redis に格納されている制御されたキーの値を表します。
rreeee
以上が同時リクエストを防ぐための Redis アトミックカウンターの増加についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。