ホームページ  >  記事  >  バックエンド開発  >  ブラッシング命令を防ぐための Redis Counter メソッドの紹介

ブラッシング命令を防ぐための Redis Counter メソッドの紹介

小云云
小云云オリジナル
2017-12-14 14:29:172588ブラウズ

インターフェイス リクエストの同時実行制限に対処する場合、または注文不正を防止するためにセキュリティ インターセプトを行う場合、たとえばインターフェイス リクエストの場合、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 などの他の増分/減分操作を使用すると、ユーザーはさまざまな操作を実行してカウンターの値を増減できます。たとえば、これらのコマンドはゲームのスコアラーに使用できます。

関連する推奨事項:

phpでのRedis関数の使用法のまとめ

Redisクラスター構築の全記録

パフォーマンスカウンターに関する10の推奨コンテンツ

以上がブラッシング命令を防ぐための Redis Counter メソッドの紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。