yiisoft/mutex-db-mysql

该包已被废弃,不再维护。作者建议使用yiisoft/mutex-pdo-mysql包。

Yii Mutex库 - MySQL PDO驱动程序

1.1.0 2021-10-19 07:18 UTC

README

Yii

Yii Mutex库 - MySQL PDO驱动程序


Latest Stable Version Total Downloads Build status Scrutinizer Code Quality Code Coverage Mutation testing badge static analysis type-coverage

此库为yiisoft/mutex提供MySQL互斥锁实现。

要求

  • PHP 7.4或更高版本。
  • PDO PHP扩展。

安装

可以使用Composer安装此包。

composer require yiisoft/mutex-pdo-mysql

通用用法

此包提供了两个类,实现了来自yiisoft/mutex包的MutexInterfaceMutexFactoryInterface

/**
 * @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软件维护。

支持项目

Open Collective

关注更新

Official website Twitter Telegram Facebook Slack