CloudCastle Lock API

CacheLockStore
in package
implements LockStore

FinalYes

Хранилище блокировок поверх 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]
On this page

Search results