roadrunner-php / lock
此包为 RoadRunner Lock 插件提供 PHP 集成包,可轻松管理 PHP 应用程序中的分布式锁。该插件提供了一种快速、轻量级且可靠的方式在分布式环境中获取、释放和管理锁,非常适合用于高流量 Web 应用程序和微服务。
1.0.0
2023-11-10 10:09 UTC
Requires
- php: ^8.1
- ramsey/uuid: ^4.7
- roadrunner-php/roadrunner-api-dto: ^1.0
- spiral/goridge: ^4.0
Requires (Dev)
- mockery/mockery: ^1.5
- phpunit/phpunit: ^10.0
- vimeo/psalm: ^5.9
This package is auto-updated.
Last update: 2024-08-27 22:13:40 UTC
README
RoadRunner 锁
此包为 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)。有关更多信息,请参阅 许可证文件。