C语言 c++ php mysql nginx linux lnmp lamp lanmp memcache redis 面试 笔记 ppt 设计模式 问题 远程连接

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

 

posted on 2017-04-23 17:49  思齐_  阅读(3341)  评论(0编辑  收藏  举报