* +---------------------------------------------------------------------- */ namespace app\api\middleware; use app\Request; use crmeb\exceptions\ApiException; use crmeb\interfaces\MiddlewareInterface; use crmeb\services\CacheService; use think\facade\Config; /** * Redis锁 * Class BlockerMiddleware * @author 等风来 * @email 136327134@qq.com * @date 2023/2/8 * @package app\api\middleware */ class BlockerMiddleware implements MiddlewareInterface { /** * @param Request $request * @param \Closure $next * @author 等风来 * @email 136327134@qq.com * @date 2022/11/21 */ public function handle(Request $request, \Closure $next) { if (Config::get('cache.default') == 'file') { return $next($request); } $uid = $request->uid(); $key = md5($request->rule()->getRule() . $uid); if (!CacheService::setMutex($key)) { throw new ApiException('请求太过频繁,请稍后再试'); } $response = $next($request); $this->after($response, $key); return $response; } /** * @param $response * @param $key * @author 等风来 * @email 136327134@qq.com * @date 2022/11/22 */ public function after($response, $key) { CacheService::delMutex($key); } }