This package is a bridge that connects the powerful RoadRunner Lock plugin with the Symfony Lock component. It's designed to help you easily manage distributed locks in your PHP applications, particularly when you're working with high-traffic web applications and microservices.
Make sure that your server is configured with following PHP version and extensions:
- PHP 8.1+
You can install the package via composer:
composer require roadrunner-php/symfony-lock-driver
Using the RoadRunner Lock with Symfony is straightforward. Here's a simple example:
use RoadRunner\Lock\Lock;
use Spiral\Goridge\RPC\RPC;
use Spiral\RoadRunner\Symfony\Lock\RoadRunnerStore;
use Symfony\Component\Lock\LockFactory;
require __DIR__ . '/vendor/autoload.php';
$lock = new Lock(RPC::create('tcp://127.0.0.1:6001'));
$factory = new LockFactory(
new RoadRunnerStore($lock)
);RoadRunnerStore accepts two timing options:
| Option | Default | Description |
|---|---|---|
$initialTtl |
300.0 |
Default lock time-to-live, in seconds. When it elapses the lock is released automatically; 0 means it never expires on its own. |
$initialWaitTtl |
0 |
Default time to wait for the lock to become free, in seconds. 0 is effectively non-blocking: the RoadRunner server caps a 0 wait at 1ms, so acquiring an already-held lock fails almost immediately. A positive value blocks for up to that duration. |
// Wait up to 5 seconds for the lock, and hold it for at most 30 seconds.
$store = (new RoadRunnerStore($lock))->withTtl(ttl: 30.0, waitTtl: 5.0);Read more about using Symfony Lock component here.
Contributions are welcome! If you find an issue or have a feature request, please open an issue or submit a pull request.
The MIT License (MIT). Please see License File for more information.