• 技术文章 >后端开发 >php教程

    详解PHP接口访问频率限制

    藏色散人藏色散人2021-03-02 09:02:41转载2959

    本篇文章给大家介绍PHP接口访问频率限制,希望对需要的朋友有所帮助!

    发现网上很多限制都只是1分钟(或者某个时间)内访问的限制。

    比如1分钟限制10次 那我在59秒的访问了10次,然后key 又过期了,接下来1分钟又可以访问了 。这种限制根本就不合理。

    所以有了我的想法。

    直接上代码吧。

    /**
     * @param $uid
     * @return bool|int
     * 检测用户接口访问频率
     */
    function api_frequency_visits ($uid) {
        $key = "user:{$uid}:api:frequency";
        $redis = new Redis();
        $redis->connect('127.0.0.1');
        $data = $redis->hGetAll($key);
        //需要删除的key
        $del_key = [];
        //时间内访问的总次数
        $total = 0;
        //时间内最大访问次数
        $max_frequency = 10;
        //当前时间
        $now_time = time();
        //限制时间
        $limit_time = 60;
        foreach ($data as $time=>$count) {
            if ($time < $now_time - $limit_time) {
                $del_key[] = $time;
            } else {
                $total += $count;
            }
        }
        //存在需要删除的key
        if ($del_key) {
            $redis->hDel($key, ...$del_key);
        }
        if ($total >= $max_frequency) {
            return false;
        }
        return $redis->hIncrBy($key, $now_time, 1);
    }
    $uid = 1;
    $result = api_frequency_visits($uid);
    if (!$result) {
        echo  json_encode(['code'=>0, 'msg'=>'操作过于频繁', 'data'=>[]]);die;
    }
    echo  json_encode(['code'=>1, 'msg'=>'', 'data'=>[
        'uid'=>$uid,
        'other'=>rand()
    ]]);die;

    限制时间,限制次数这些都可以修改,包括根据用户id也可以换成自己想要的限制,比如IP等。

    key过期时间也是可以添加的。

    推荐:《PHP视频教程

    以上就是详解PHP接口访问频率限制的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:csdn,如有侵犯,请联系admin@php.cn删除
    专题推荐:php
    上一篇:详解后期静态绑定在PHP中的使用 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php接口如何处理并发• php接口有哪些类型?• PHP接口和抽象类的区别?• java调用php接口的方法是什么• 论PHP接口版本控制【兼容多端接口】
    1/1

    PHP中文网