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 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

没有看懂

1年前 评论
my38778570 (楼主) 1年前

直接在当前类中写__destruct 方法也是可以的吧。 我一般直接

try {
} finally {
Cache::delete('key')
}
1年前 评论
my38778570 (楼主) 1年前
my38778570 (楼主) 1年前

主动解锁 + 默认失效时间是不是也可以?

1年前 评论
my38778570 (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!