iainp999/lockman

锁定操作处理器

v1.0 2014-09-26 18:00 UTC

This package is auto-updated.

Last update: 2024-09-18 17:53:04 UTC


README

一个使用命名锁的PHP通用锁定库。

锁定在多进程或分布式环境中控制对资源的访问时非常有用。

实际锁定机制可以按照您的喜好以任何方式实现,以适应您的技术堆栈。您只需要为特定技术实现 LockHandlerInterface(为本地文件系统和Drupal锁定API提供了示例锁定处理器)。

您可能有一些涉及多个进程和共享资源的离线处理,其中需要关于资源独占访问的保证。在这种情况下,您可能希望考虑使用此类库,使用适当的 LockHandlerInterface 实现。

请参阅 lib/LockMan/HandlerLockHandlerInterface 实现的示例。

示例用法

在这种情况下,我们假设有一个名为 LockHandler 的类实现了 LockHandlerInterface

通用

注意。在实际中,我建议使用可配置的服务/DI容器来创建对象。

$lockHandler = new LockHandler();
$lockable = new MyLockable();
if ($lockHandler->lock($lockable)) {
  // Some critical section code.
}
...

锁定操作

您不必使用这个类,它只是为了方便在执行前需要获取锁的操作而提供的。操作完成后会释放锁;如果发生异常,则会在重新抛出异常之前释放锁。任何PHP可调用项都可以是操作。

当前实现不支持在执行前获取多个锁。这可能在未来的版本中得到支持。

以下是一个假设的示例,您可以在服务容器中构建许多这些对象(在示例中“假设”是因为您可能不会像这样直接创建所有这些对象)。

$lockHandler = new LockHandler();
$lockedOperation = new LockedOperation($lockHandler);
$lockable = new MyLockable();
$myOperation = array('SomeClass', 'someMethod');
// Execute the locked operation.
try {
   $lockedOperation->execute($myOperation, $lockable);
}
catch (Exception $ex) {
   // handle exception.
}

这里需要注意的一个重要事项是,一旦创建,$lockedOperation 对象就可以重复使用。实际的锁由在执行操作时注入的 LockableInterface 实例定义。

此实例可以用作服务容器(如Symfony组件)内部,其中实现 LockHandlerInterface 的类可以在配置中定义,并自动注入到锁定处理器“服务”中。

徽章

Travis CI : Build Status Coveralls : Coverage Status