- laravel框架中Cache缓存类中的原子锁
如果没有执行完该用户下的锁,再次请求将抛出异常,解决并发问题
try{
$lock_key = "invoice:store:uid:{$uid}";
$isLocked = Cache::lock($lock_key)->get(); //创建锁
if (!$isLocked) {
throw new \Exception('生成发票出错,同一时间请勿重复提交。');
}
//....
//这里进行相关逻辑
return $this->ok(true);
} catch (\Exception $e) {
DB::rollBack();
return $this->error($e->getMessage());
} finally {
//执行完成,进行解锁
if ($isLocked) {
Cache::lock($lock_key)->release();
}
}