• 基于predis高并发情况下实现频率控制的函数


    /**
     * 频率控制函数
     * @param string $product 保持唯一
     * @param string $key 限制频率的维度 比如uid
     * @param int $millisecond 毫秒间隔内只可以访问1次
     * @return bool true-可以正常访问 false-命中频率控制
     */
    function controlRate($product, $key, $millisecond) {
        if (empty($product) || empty($key) || !is_int($millisecond) || $millisecond <= 0) {
            return true;
        }
        
        $millTime = intval(microtime(true) * 1000);
        $key = sprintf('ctrl_%s_%s', $product, $key);
    
        $redis = new Redis();
        $redis->connect('redis');
        $redis->auth('123456');
    
       $lastTimeRes = $redis->get($key);
        if ($lastTimeRes === false) {
            $addRes = $redis->setNx($key, $millTime);
            // 此处有设置失败的风险
            $redis->expire($key, 86400);
            return $addRes;
        }
        
        // 若存在 则比对现在的时间 若频率超过x毫秒 则提示过于频繁
        $nowTime = $millTime;
        if ($nowTime - intval($lastTimeRes) < $millisecond) {
            return false;
        }
    
          // 记录最新时间
        return $redis->setEx($key, 86400, $millTime);
    }
     
  • 相关阅读:
    方法
    数组
    Scanner类+Random
    运算符2
    运算符1
    Linux中Oracle的安装
    redis安装常见错误
    redis常用命令
    Linux中redis安装
    修改Oracle字符集
  • 原文地址:https://www.cnblogs.com/xuhuaiqu/p/15556869.html
Copyright © 2020-2023  润新知