Класс LockFactory
Класс LockFactory создаёт объекты блокировок
Lock для защиты общих ресурсов от одновременного
доступа. Фабрика принимает хранилище блокировок
(например, файловое, semaphore или Redis) и возвращает
объект Lock через метод createLock. Первым
параметром метода передаётся имя ресурса, а вторым -
таймаут блокировки в секундах.
Синтаксис
use Symfony\Component\Lock\LockFactory;
$factory = new LockFactory($store);
$lock = $factory->createLock($resource, $ttl);
Пример
Давайте создадим фабрику блокировок с файловым
хранилищем и получим блокировку для ресурса
'article':
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Lock\Store\FlockStore;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(): Response
{
$store = new FlockStore();
$factory = new LockFactory($store);
$lock = $factory->createLock('article');
if ($lock->acquire()) {
$lock->release();
return new Response('lock acquired');
}
return new Response('lock busy');
}
}
?>
Результат выполнения кода:
lock acquired
Пример
Давайте используем сервис lock.factory через
внедрение зависимости и заблокируем ресурс на 300
секунд:
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Lock\LockFactory;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/', name: 'article_index')]
public function index(LockFactory $factory): Response
{
$lock = $factory->createLock('article', 300);
if (!$lock->acquire()) {
return new Response('lock busy');
}
$lock->release();
return new Response('hello');
}
}
?>
Результат выполнения кода:
hello
Смотрите также
-
метод
createLock,
который создаёт объект блокировки -
класс
Lock,
который управляет блокировкой ресурса -
метод
acquire,
который захватывает блокировку -
метод
release,
который освобождает блокировку