>  기사  >  백엔드 개발  >  주문 브러싱을 방지하기 위한 Redis 카운터 방법 소개

주문 브러싱을 방지하기 위한 Redis 카운터 방법 소개

小云云
小云云원래의
2017-12-14 14:29:172630검색

인터페이스 요청에 대한 동시성 제한을 처리하거나 주문 사기를 방지하기 위해 보안 차단을 수행하려는 경우(예: 인터페이스 요청의 경우) 초당 총 요청 수를 200으로 제한합니다. 숫자가 200을 초과하는 경우 잠시 기다려 주세요. 다음 순간에 다시 요청하세요. 여기서는 redis를 구현하기 위한 카운터 모드로 사용합니다. 이 글에서는 사기성 주문을 방지하기 위해 카운터를 구현하는 redis의 방법과 관련 코드를 주로 소개합니다. 여기에는 특정 참고 가치가 있으며 도움이 필요한 친구들이 이에 대해 배울 수 있습니다.

redis 호출 방법:

INCR key

키에 저장된 숫자 값을 1씩 증가시킵니다.

키가 존재하지 않으면 키의 값이 먼저 0으로 초기화된 후 INCR 연산이 수행됩니다.

값에 잘못된 유형이 포함되어 있거나 문자열 유형의 값을 숫자로 표현할 수 없는 경우 오류가 반환됩니다.

이것은 문자열에 대한 작업입니다. Redis에는 전용 정수 유형이 없기 때문에 key에 저장된 문자열을 10진수 64비트 부호 있는 정수로 해석하여 INCR 작업을 수행합니다.

code:

redis> SET test 20
OK
redis> INCR test
(integer) 21
redis> GET test # 数字值在 Redis 中以字符串的形式保存
"21"

Implementation of counter

Counter는 Redis의 원자 증가 작업이 구현할 수 있는 가장 직관적인 모드입니다. 아이디어는 매우 간단합니다. 작업이 발생할 때마다 Redis에 INCR 명령을 보냅니다.

예를 들어 웹 애플리케이션에서 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 카운터 방법 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.