方式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); }