desmart / laravel-padlock
Laravel 的脚本锁定机制。允许在一定时间内阻止脚本执行,例如避免 CRON 作业重叠
1.2.2
2017-04-10 08:16 UTC
Requires
- php: >=7.0.0
- laravel/framework: 5.3.* || 5.4.*
Requires (Dev)
- phpunit/phpunit: ~5.0
This package is not auto-updated.
Last update: 2024-09-14 20:45:52 UTC
README
此包允许您轻松地临时锁定脚本执行。
在某些情况下可能很有用,例如与不可靠的 APIS 连接的 CRON 作业,您不能100%确信脚本不会在某一点失败。
要求
此包需要
- PHP >= 7.0.0
- Laravel 5.3 || 5.4
安装
$ composer require desmart/laravel-padlock
- 将
DeSmart\Padlock\ServiceProvider
添加到您的config/app.php
/*
* Package Service Providers...
*/
DeSmart\Padlock\ServiceProvider::class,
$ php artisan vendor:publish --provider="DeSmart\Padlock\ServiceProvider"
- 在
config/padlock.php
中进行配置 - 在数据库和文件系统驱动之间进行选择
示例用法
此包的目的是保护您的脚本不被多线程运行。
它对长时间运行的后端作业很有用,例如处理查询或从外部 API 收集数据。
class FooCommand extends \Illuminate\Console\Command
{
protected $signature = 'foo:bar';
protected $description = 'Foo command utilizing Padlock';
/** @var PadlockHandler */
private $padlockHandler;
const PADLOCK_SCRIPT = 'FooCommand';
/** 30 seconds padlock time to live - after that your padlock will be unlocked */
const PADLOCK_TTL = 30;
/**
* FooCommand constructor.
* @param \DeSmart\Padlock\PadlockHandler $padlockHandler
*/
public function __construct(\DeSmart\Padlock\PadlockHandler $padlockHandler)
{
parent::__construct();
$this->padlockHandler = $padlockHandler;
}
public function handle()
{
if (true === $this->padlockHandler->isLocked(self::PADLOCK_SCRIPT, self::PADLOCK_TTL)) {
echo "Padlock exists, script locked." . PHP_EOL;
return;
}
$this->padlockHandler->lock(self::PADLOCK_SCRIPT);
// do your stuff
$this->padlockHandler->unlock(self::PADLOCK_SCRIPT);
}
}