此包为 RoadRunner Lock 插件提供 PHP 集成包,可轻松管理 PHP 应用程序中的分布式锁。该插件提供了一种快速、轻量级且可靠的方式在分布式环境中获取、释放和管理锁,非常适合用于高流量 Web 应用程序和微服务。

1.0.0 2023-11-10 10:09 UTC

This package is auto-updated.

Last update: 2024-08-27 22:13:40 UTC


README

RoadRunner 锁

PHP Version Require Latest Stable Version phpunit psalm Codecov Total Downloads

此包为 RoadRunner Lock 插件提供 PHP 集成包,可轻松管理 PHP 应用程序中的分布式锁。该插件提供了一种快速、轻量级且可靠的方式在分布式环境中获取、释放和管理锁,非常适合用于高流量 Web 应用程序和微服务。

需求

请确保您的服务器已配置以下 PHP 版本和扩展

  • PHP 8.1+

安装

您可以通过 composer 安装此包

composer require roadrunner-php/lock

使用方法

use RoadRunner\Lock\Lock;
use Spiral\Goridge\RPC\RPC;

require __DIR__ . '/vendor/autoload.php';

$lock = new Lock(RPC::create('tcp://127.0.0.1:6001'));

获取锁

锁定资源,使其一次只能由一个进程访问。当一个资源被锁定时,其他尝试锁定同一资源的进程将被阻塞,直到锁被释放。

$id = $lock->lock('pdf:create');

// Acquire lock with ttl - 10 seconds
$id = $lock->lock('pdf:create', ttl: 10);
// or
$id = $lock->lock('pdf:create', ttl: new \DateInterval('PT10S'));

// Acquire lock and wait 5 seconds until lock will be released
$id = $lock->lock('pdf:create', wait: 5);
// or
$id = $lock->lock('pdf:create', wait: new \DateInterval('PT5S'));

// Acquire lock with id - 14e1b600-9e97-11d8-9f32-f2801f1b9fd1
$id = $lock->lock('pdf:create', id: '14e1b600-9e97-11d8-9f32-f2801f1b9fd1');

获取读锁

锁定资源以实现共享访问,允许多个进程同时访问该资源。当一个资源被共享访问锁定时,其他尝试对该资源进行独占访问的进程将被阻塞,直到所有共享锁被释放。

$id = $lock->lockRead('pdf:create', ttl: 10);
// or
$id = $lock->lockRead('pdf:create', ttl: new \DateInterval('PT10S'));

// Acquire lock and wait 5 seconds until lock will be released
$id = $lock->lockRead('pdf:create', wait: 5);
// or
$id = $lock->lockRead('pdf:create', wait: new \DateInterval('PT5S'));

// Acquire lock with id - 14e1b600-9e97-11d8-9f32-f2801f1b9fd1
$id = $lock->lockRead('pdf:create', id: '14e1b600-9e97-11d8-9f32-f2801f1b9fd1');

释放锁

释放之前通过 lock()lockRead() 调用获得的资源上的独占锁或读锁。

// Release lock after task is done.
$lock->release('pdf:create', $id);

// Force release lock
$lock->forceRelease('pdf:create');

检查锁

检查资源是否当前被锁定,并返回有关锁的信息。

$status = $lock->exists('pdf:create');
if($status) {
    // Lock exists
} else {
    // Lock not exists
}

更新 TTL

更新被锁定资源的生存时间 (TTL)。

// Add 10 seconds to lock ttl
$lock->updateTTL('pdf:create', $id, 10);
// or
$lock->updateTTL('pdf:create', $id, new \DateInterval('PT10S'));

测试

composer test

致谢

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件