/**
* 防止接口恶意调用
*/
public function checkRequest(){
# 一分钟调用接口不能超过10次
$limit = 10;
$time = 10;
$this -> redis -> select(12);
$ip = request() -> ip();
$lock_time = $this -> redis -> zScore( 'black_list' , $ip );
if( time() - $lock_time < 5*60 ){
$this -> error('调用接口太过频繁,请稍后重试');
}else{
$this -> redis -> zRem( 'black_list' ,$ip );
}
# 记录ip访问次数
$ip_value = $this -> redis -> get($ip);
if( ! $ip_value ){
# 设置key自增
$this -> redis -> incr( $ip );
# 设置过期事件为11秒
$this -> redis -> expire( $ip , $time );
}else{
$this -> redis -> incr( $ip );
}
//集合【里边的元素是不会重复的】 字符串
// 集合里边的元素 不能单独设置有效期
# 超过10次,把ip记录到黑名单,把ip存入redis (set)
# 把ip当作key ,存入redis 存5分钟
if( $ip_value > $limit ){
# 使用有序集合存取
$this -> redis -> zAdd( 'black_list' , time() ,$ip );
# key value 字符串存取
// $key = md5( $ip );
//
// #记录黑名单
// $redis -> set($key,1,60);
// # 集合 --- 数据不会重复的
// $redis -> sAdd( 'black_list' , $ip );
//
// $redis -> expire( 'black_list' , 60 * 5 );
$this -> error('调用接口太过频繁,请稍后重试');
}
// exit;
}