laravel 实战延迟解锁
前言
在开发过程中并发处理需要加锁,但过程中逻辑判断很多,不满足条件就要解锁,如果每个地方都加一个解锁,就会显得很臃肿,这时我们可以这样做!
$cache = Cache::get('key');
if (!empty($cache)) {
exit('请不要频繁操作');
}
Cache::put('key', time(), 2);
//延迟解锁( ${__LINE__} 不要删除,否则没作用)
${__LINE__} = defer(function () use ($admin){
Cache::delete('key');
});
//代码逻辑处理
//延迟操作
if (!function_exists('defer')) {
function defer(callable $cb)
{
return new class($cb) {
public function __construct($fn)
{
$this->fn = $fn;
}
public function __destruct()
{
($this->fn)();
}
};
}
}
参考 博客:php 实现golang defer延迟执行(先进后出)
本作品采用《CC 协议》,转载必须注明作者和本文链接
没有看懂
直接在当前类中写__destruct 方法也是可以的吧。 我一般直接
主动解锁 + 默认失效时间是不是也可以?