Redis は電流制限を実装し、トークン バケット アルゴリズムとスライディング ウィンドウ アルゴリズムを使用します。トークン バケット アルゴリズムは受信リクエストを制限し、スライディング ウィンドウ アルゴリズムは一定期間内のリクエストの数を記録し、しきい値を超えているかどうかを判断します。 Redis は incr/decr コマンドを使用してトークン バケットを操作し、time コマンドと incrby コマンドを使用してスライディング ウィンドウ リクエストの数を記録します。電流制限の設定は、set および config set コマンドによって実装されます。サンプル コードでは、トークン バケットの容量とレート、スライディング ウィンドウのサイズとしきい値を設定し、リクエストが電流制限されているかどうかを確認します。
Redis 電流制限の実装
Redis は トークン バケット アルゴリズム および を使用しますスライディング ウィンドウ アルゴリズムを使用して電流制限を実現します。
トークン バケット アルゴリズム
トークン バケット アルゴリズムは、システムに流入するリクエストを水の流れとして扱います。トークン バケットは、一定数のリクエストを保持できるバケットです。トークン。リクエストが到着すると、システムはトークン バケットにトークンを追加します。トークンが不足している場合、リクエストは拒否されます。
スライディング ウィンドウ アルゴリズム
スライディング ウィンドウ アルゴリズムは、時間を固定サイズの間隔 (ウィンドウ) に分割し、各ウィンドウ内のリクエストの数を記録します。新しいリクエストが到着すると、システムは現在のウィンドウ内のリクエストの数がしきい値を超えているかどうかを確認し、しきい値を超えている場合、リクエストは拒否されます。
Redis での実装
Redis は、トークン バケット アルゴリズムとスライディング ウィンドウ アルゴリズムを組み合わせて使用して、電流制限を実現します。
トークン バケット
Redis のトークン バケットは、incr
/decr
コマンドを使用して操作します。 incr
コマンドはトークン バケットにトークンを追加し、decr
コマンドはトークン バケットからトークンを削除します。
Sliding Window
Redis は、time
コマンドを使用して現在の時刻を取得し、incrby
コマンドを使用してそれぞれの時刻を記録します。ウィンドウ内のリクエストの数。
電流制限構成
Redis は、set
および config set
コマンドを使用して、電流制限パラメーターを構成します。
set
コマンドは、トークン バケットの容量と生成レートを設定するために使用されます。 config set
コマンドは、スライディング ウィンドウのサイズとしきい値を設定するために使用されます。 使用例
<code># 设置令牌桶,容量为100,生成速率为每秒10个令牌 SET my_token_bucket 100 CONFIG SET my_token_bucket_refill_rate 10 # 设置滑动窗口,大小为10秒,阈值为每秒100个请求 CONFIG SET my_sliding_window_size 10 CONFIG SET my_sliding_window_threshold 100 # 检查请求是否被限流 IF INCR my_sliding_window_counter > my_sliding_window_threshold THEN # 请求被限流,拒绝 DECR my_sliding_window_counter RETURN -1 END IF # 请求未被限流,记录请求并执行操作 INCR my_sliding_window_counter # ... 执行操作 ...</code>
以上がRedis で電流制限を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。