redis 频率限制
方式1:
$redis = new Redis(); //以自然时间控制 一自然分钟内超过100次进行限制, 屏蔽多久的时间必须为计数key时间的倍数 $key = 'xxxx'.date('Y-m-d H:i:s'); $fkey = 'xxxx';//屏蔽key if(false !== $redis->set($fkey)) { return false; }
/////
//更优的处理方式
if($num === false)
{
$redis->set($key, 1, array('NX', 'PX' => 60));
}else{
$redis->incr($key);
}
/////
if($num = $redis->get($key)>100) { $redis->set($fkey,true,60); }else{ $redis->incr($key); if($num == 1) { $redis->expire($key, 60); //保持跟自然间隔时间相同 } }
方式2:
//以持续时间控制 一分钟内超过100次进行限制, 屏蔽多久的时间必须大于 计数key的时间,否则会计数出错 $key = 'xxxx'; if($redis->get($key)>100) { }else{ $redis->incr($key); if($num == 1) { $redis->expire($key, 60); } }
每个指定自然秒
//根据每隔多少自然秒生成key function getZiRanKey($sec) { // $time = strtotime('2017-04-23 17:30:04'); $time = time(); $time = $time - ($time%$sec); return date('Y-m-d H:i:s',$time); }