spiral / lock-bridge
此包为RoadRunner Lock提供了一个集成桥接。
1.x-dev
2023-07-17 07:20 UTC
Requires
- php: ^8.1
- roadrunner-php/lock: ^1.0
- spiral/boot: ^3.7
- spiral/roadrunner-bridge: ^3.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.20
- phpunit/phpunit: ^10.2
- spiral/nyholm-bridge: ^1.3
- spiral/testing: ^2.4
- vimeo/psalm: ^5.13
This package is auto-updated.
Last update: 2024-08-28 14:02:21 UTC
README
此包为RoadRunner Lock提供了一个集成桥接,这使得在Spiral Framework中管理分布式锁变得简单。该包提供了一种快速、轻量级且可靠的方式来获取、释放和管理分布式环境中的锁,非常适合用于高流量Web应用和微服务。
要求
确保您的服务器已配置以下PHP版本和扩展
- PHP 8.1+
- Spiral Framework 3.7+
安装
您可以通过composer安装此包
composer require spiral/lock-bridge
在安装包之后,您需要从包中注册引导加载器。
protected const LOAD = [ // ... \Spiral\LockBridge\Bootloader\LockBootloader::class, ];
注意 如果您正在使用
spiral-packages/discoverer
,则无需自行注册引导加载器。
用法
use RoadRunner\Lock\LockInterface; $lock = $container->get(LockInterface::class);
获取锁
锁定资源,使其一次只能被一个进程访问。当一个资源被锁定时,尝试锁定同一资源的其他进程将被阻塞,直到锁被释放。
$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)。有关更多信息,请参阅许可证文件。