CacheLockStore
in package
implements
LockStore
Хранилище блокировок поверх PSR-16 кэша (`cloud-castle/cache` или любой другой).
Блокировка — запись в кэше «ключ ресурса → токен владельца» с истечением по TTL, что даёт распределённые блокировки между процессами через общий кэш-бэкенд и автоматическое освобождение «зависших» блокировок по сроку жизни.
Атомарность зависит от бэкенда. PSR-16 не предоставляет атомарного
«установить, если отсутствует», поэтому захват реализован как «проверить →
записать → перечитать своё» — надёжно для кооперативной координации и на
бэкендах с одним владельцем записи, но под высокой конкуренцией нескольких
процессов на кэше без атомарной вставки возможна гонка. Для жёстких
межпроцессных гарантий используйте FlockStore или атомарный бэкенд
(например, Redis SET NX).
Ключ ресурса хешируется в валидный по PSR-16 ключ кэша.
Table of Contents
Interfaces
- LockStore
- Хранилище блокировок: единая абстракция над механизмами взаимного исключения (файловые `flock`, кэш с TTL, память процесса), поверх которой работает {@see \CloudCastle\Lock\Lock}.
Methods
- __construct() : mixed
- acquire() : bool
- Попытаться захватить блокировку без ожидания (неблокирующе).
- isAcquired() : bool
- Удерживается ли блокировка (любым владельцем) в данный момент.
- refresh() : bool
- Продлить срок жизни блокировки, удерживаемой этим владельцем.
- release() : void
- Снять блокировку, если она принадлежит этому владельцу.
Methods
__construct()
public
__construct(CacheInterface $cache) : mixed
Parameters
- $cache : CacheInterface
-
PSR-16 кэш-бэкенд для хранения блокировок
acquire()
Попытаться захватить блокировку без ожидания (неблокирующе).
public
acquire(string $key, string $owner, int|null $ttlSeconds) : bool
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
уникальный токен владельца
- $ttlSeconds : int|null
-
срок жизни в секундах для хранилищ с TTL;
null— до явного снятия
Attributes
- #[Override]
Return values
bool —true, если блокировка захвачена этим владельцем; false,
если она уже удерживается кем-то другим
isAcquired()
Удерживается ли блокировка (любым владельцем) в данный момент.
public
isAcquired(string $key) : bool
Parameters
- $key : string
-
ключ ресурса
Attributes
- #[Override]
Return values
bool —true, если ресурс заблокирован и блокировка не истекла
refresh()
Продлить срок жизни блокировки, удерживаемой этим владельцем.
public
refresh(string $key, string $owner, int|null $ttlSeconds) : bool
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
токен владельца
- $ttlSeconds : int|null
-
новый срок жизни в секундах;
null— бессрочно
Attributes
- #[Override]
Return values
bool —true, если блокировка принадлежит владельцу и продлена
release()
Снять блокировку, если она принадлежит этому владельцу.
public
release(string $key, string $owner) : void
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
токен владельца
Attributes
- #[Override]