yiisoft / mutex-db-mysql
1.1.0
2021-10-19 07:18 UTC
Requires
- php: ^7.4|^8.0
- ext-pdo: *
- yiisoft/mutex: ^1.1
Requires (Dev)
- phpunit/phpunit: ^9.5
- roave/infection-static-analysis-plugin: ^1.9
- spatie/phpunit-watcher: ^1.23
- vimeo/psalm: ^4.9
This package is auto-updated.
Last update: 2024-05-20 10:29:42 UTC
README
Yii Mutex库 - MySQL PDO驱动程序
此库为yiisoft/mutex提供MySQL互斥锁实现。
要求
- PHP 7.4或更高版本。
PDO
PHP扩展。
安装
可以使用Composer安装此包。
composer require yiisoft/mutex-pdo-mysql
通用用法
此包提供了两个类,实现了来自yiisoft/mutex包的MutexInterface
和MutexFactoryInterface
。
/** * @var \PDO $connection Configured for MySQL. */ $mutex = new \Yiisoft\Mutex\Mysql\MysqlMutex('mutex-name', $connection); $mutexFactory = new \Yiisoft\Mutex\Mysql\MysqlMutexFactory($connection);
你可以有多种方式使用此包。你可以在同步模式下执行回调,即同时只执行单个回调实例。
$synchronizer = new \Yiisoft\Mutex\Synchronizer($mutexFactory); $newCount = $synchronizer->execute('critical', function () { return $counter->increase(); }, 10);
另一种方法是手动打开和关闭互斥锁
$simpleMutex = \Yiisoft\Mutex\SimpleMutex($mutexFactory); if (!$simpleMutex->acquire('critical', 10)) { throw new \Yiisoft\Mutex\Exception\MutexLockedException('Unable to acquire the "critical" mutex.'); } $newCount = $counter->increase(); $simpleMutex->release('critical');
可以在较低级别完成
$mutex = $mutexFactory->createAndAcquire('critical', 10); $newCount = $counter->increase(); $mutex->release();
如果你需要更多的控制,你可以手动获取互斥锁
$mutex = $mutexFactory->create('critical'); if (!$mutex->acquire(10)) { throw new \Yiisoft\Mutex\Exception\MutexLockedException('Unable to acquire the "critical" mutex.'); } $newCount = $counter->increase(); $mutex->release();
MysqlMutex
支持“等待一定时间锁”的功能。使用withRetryDelay()
方法,你可以覆盖每次尝试之间的毫秒数,直到指定的超时时间超时
$mutex = $mutex->withRetryDelay(100);
默认情况下,它是50毫秒 - 这意味着我们可能每秒尝试获取锁多达20次。
文档
如果你需要帮助或有疑问,请访问Yii论坛。你也可以查看其他Yii社区资源。
许可
Yii Mutex库 - MySQL PDO驱动程序是自由软件。它根据BSD许可协议发布。有关更多信息,请参阅LICENSE
。
由Yii软件维护。