prefix . getKey($self->key, $params), $self->expire], 1); } function delLock($self, $params) {//释放锁脚本 $script = <<prefix . getKey($self->key, $params)], 1); } function lock($self, $params) {//争抢锁 $retry = $self->retry; while ($retry-- > 0) { $get_lock = getLock($self, $params); if ($get_lock) { return true; break; } usleep(1000 * 200); } return false; } function run($self, $params, $func) {//执行抢锁 try { if (lock($self, $params)) { $result = call_user_func($func, ...$params);//执行业务逻辑 delLock($self, $params); return $result; } return false; } catch (\Exception $exception) { delLock($self, $params); return 'false'; } } return [ Lock::class => function (\ReflectionMethod $method, $instance, $self) { $d_collector = BeanFactory::getBean(DecoratorCollector::class); $key = get_class($instance) . "::" . $method->getName(); $d_collector->dSet[$key] = function ($func) use ($self) { //收集装饰器 放入 装饰器收集类 return function ($params) use ($func, $self) { /** @var $self Lock */ if ($self->key != '') { $result = run($self, $params, $func); if (!$result) { return '服务器繁忙'; } return $result; } return call_user_func($func, ...$params);//执行业务逻辑 }; }; return $instance; } ];