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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM