使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数

Posted 张三的哥哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数相关的知识,希望对你有一定的参考价值。

实现每个用户在某网站10分钟内最多投票5次

function isFrequently($key){
    $t = 60*10;
    $n = 5;
    $mem = new Memcache();
    $mem->connect(‘127.0.0.1‘,‘11211‘);
    if(!$mem){
        echo ‘memcache连接失败!‘;
        exit;
    }
    $val = unserialize($mem->get($key));
    $val = $val ? $val : array();

//    if(count($val) >= 5 && time()-$val[0]<$t){
//        echo ‘10分钟之内最多投票5次‘;
//    }else{
//        if(count($val) > 1){
//            array_shift($val);
//        }
//        $val[] = time();
//        $mem->set($key,serialize($val),0,$t);
//        echo ‘投票成功!‘;
//    }


    if(count($val) < 5 || $b = array_shift($val)<time()-$t){
        $val[] = time();
        $mem->set($key,serialize($val),0,$t);
        echo ‘投票成功!‘;
    }else{
        echo ‘10分钟之内最多投票5次‘;
    }
}

  注:$b = array_shift($val)<time()-$t中运算符优先级是-高于<,<高于=。因此右边小于成立,$b=1,否则$b=0。

开始写的注释部分代码,后来进行优化,对||了解更加深入。 null与数字进行比较时候,默认为0。

以上是关于使用memcache或redis限制某个用户或者某ip用户一段时间内最大投票次数的主要内容,如果未能解决你的问题,请参考以下文章

nginx中设置限制指定用户或IP组访问权限

一种分布式布隆过滤器设计

双指针(使用题目:求子数组(可能是连续的或者是数组中某两个或某三个之和(积等等)等于某个值)特点分析切记每道题目的分析都要切合题意

.NetCore利用Redis实现对接口访问次数限制

麻烦用vbs写一段获取某个ie句柄或者是当前网页的URL

如何高度限制具有“特定角色”的用户从“某个地方”访问应用程序?