インターフェイス リクエストの同時実行制限に対処する場合、または注文不正を防止するためにセキュリティ インターセプトを行う場合、たとえばインターフェイス リクエストの場合、1 秒あたりのリクエストの総数は 200 に制限されます。この数が 200 を超える場合は、 、次の秒を待ち、再度リクエストします。ここでは、実装するカウンター モードとして Redis が使用されます。この記事では主に、不正な注文を防ぐためのカウンターを実装するための Redis の方法と関連コードを紹介します。これには特定の基準値があり、必要な友人がそれについて知ることができます。
redisメソッドの呼び出し:
INCR key
keyに格納されている数値を1ずつインクリメントします。
keyが存在しない場合は、keyの値が0に初期化されてからINCR演算が行われます。
値に間違った型が含まれている場合、または文字列型の値が数値として表現できない場合は、エラーが返されます。
これは文字列に対する演算です。Redis には専用の整数型がないため、key に格納された文字列は 10 進数の 64 ビット符号付き整数として解釈され、INCR 演算が実行されます。
code:
redis> SET test 20 OK redis> INCR test (integer) 21 redis> GET test # 数字值在 Redis 中以字符串的形式保存 "21"
counter の実装
Counter は、Redis のアトミック インクリメント操作によって実装できる最も直感的なモードであり、操作が発生するたびに INCR コマンドを送信します。レディス。
たとえば、Web アプリケーションで、1 年間毎日のユーザーのクリック数を知りたい場合は、ユーザー ID と関連する日付情報をキーとして使用し、毎日自動インクリメント操作を実行するだけで済みます。ユーザーがページをクリックした時間だけです。
たとえば、ユーザー名が Peter で、クリック時刻が 2012 年 3 月 22 日の場合、コマンド INCR peter::2012.3.22 を実行します。
$redisKey = “api_name_” + $api; $count = $this->redis->incr($redisKey); if ($count == 1) { //设置有效期一s $this->redis->expire($redisKey,1);//设置一s的过期时间 } if (count > 200) {//防止刷单的安全拦截 return false;//超过就返回false } //后续处理
これは単に Redis カウンターのアプリケーションを実装するだけであり、次のメソッドもあります:
このシンプル モードを拡張するには次の方法:
INCR と EXPIRE を組み合わせて To に使用できます。指定された生存時間内でのみカウントの目的を達成します。
クライアントは、GETSET コマンドを使用して、カウンタの現在の値をアトミックに取得し、カウンタをクリアできます。詳細については、GETSET コマンドを参照してください。
DECR や INCRBY などの他の増分/減分操作を使用すると、ユーザーはさまざまな操作を実行してカウンターの値を増減できます。たとえば、これらのコマンドはゲームのスコアラーに使用できます。
関連する推奨事項:
以上がブラッシング命令を防ぐための Redis Counter メソッドの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。