friendsofhyperf / lock
The lock component for Hyperf.
v3.2.1
2026-06-09 14:51 UTC
Requires
- hyperf/config: ~3.2.0
- hyperf/context: ~3.2.0
- hyperf/macroable: ~3.2.0
- hyperf/stringable: ~3.2.0
- hyperf/support: ~3.2.0
- nesbot/carbon: ^2.0 || ^3.0
Suggests
- hyperf/cache: Require this component for driver 'file'.
- hyperf/db-connection: Require this component for driver 'database'.
- hyperf/redis: Require this component for driver 'redis'.
This package is auto-updated.
Last update: 2026-06-17 01:08:34 UTC
README
The lock component for Hyperf. 中文说明
Installation
- Require
composer require friendsofhyperf/lock
- Publish
php bin/hyperf.php vendor:publish friendsofhyperf/lock -i config
Usage
You may create and manage locks using the lock() method:
$lock = lock($name = 'foo', $seconds = 10, $owner = null); if ($lock->get()) { // Lock acquired for 10 seconds... $lock->release(); }
The get method also accepts a closure. After the closure is executed, Will automatically release the lock:
lock('foo')->get(function () { // Lock acquired indefinitely and automatically released... });
If the lock is not available at the moment you request it, you may instruct the lock to wait for a specified number of seconds. If the lock can not be acquired within the specified time limit, an FriendsOfHyperf\Lock\Exception\LockTimeoutException will be thrown:
use FriendsOfHyperf\Lock\Exception\LockTimeoutException; $lock = lock('foo', 10); try { $lock->block(5); // Lock acquired after waiting maximum of 5 seconds... } catch (LockTimeoutException $e) { // Unable to acquire lock... } finally { $lock->release(); } lock('foo', 10)->block(5, function () { // Lock acquired after waiting maximum of 5 seconds... });
Using by annotation
use FriendsOfHyperf\Lock\Annotation\Lock; use FriendsOfHyperf\Lock\Driver\LockInterface; class Foo { #[Lock(name:"foo", seconds:10)] protected LockInterface $lock; public function bar() { $this->lock->get(function () { // Lock acquired indefinitely and automatically released... }); } }