CloudCastle Lock API

InMemoryStore
in package
implements LockStore, TtlAwareStore

FinalYes

Хранилище блокировок в памяти процесса.

Блокировки живут в приватном массиве и исчезают вместе с процессом — подходит для координации в пределах одного запроса/процесса и для тестов. В рамках одного PHP-процесса захват атомарен (нет вытесняющей многопоточности), поэтому гонок между «проверить» и «захватить» не возникает.

Срок жизни (TTL) проверяется относительно инъектируемых часов (PSR-20): истечение блокировки детерминировано в тестах — «перематывайте» время FrozenClock/ MockClock вместо реального ожидания. Для взаимного исключения МЕЖДУ процессами используйте FlockStore или CacheLockStore.

Table of Contents

Interfaces

LockStore
Хранилище блокировок: единая абстракция над механизмами взаимного исключения (файловые `flock`, кэш с TTL, память процесса), поверх которой работает {@see \CloudCastle\Lock\Lock}.
TtlAwareStore
Хранилище блокировок, умеющее сообщить остаток срока жизни блокировки.

Methods

__construct()  : mixed
acquire()  : bool
Попытаться захватить блокировку без ожидания (неблокирующе).
isAcquired()  : bool
Удерживается ли блокировка (любым владельцем) в данный момент.
refresh()  : bool
Продлить срок жизни блокировки, удерживаемой этим владельцем.
release()  : void
Снять блокировку, если она принадлежит этому владельцу.
remainingTtl()  : int|null
Остаток срока жизни блокировки, удерживаемой владельцем, в секундах.

Methods

__construct()

public __construct(ClockInterface $clock) : mixed
Parameters
$clock : ClockInterface

часы для вычисления и проверки TTL (PSR-20)

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]

remainingTtl()

Остаток срока жизни блокировки, удерживаемой владельцем, в секундах.

public remainingTtl(string $key, string $owner) : int|null
Parameters
$key : string

ключ ресурса

$owner : string

токен владельца

Attributes
#[Override]
Return values
int|null

секунды до автоистечения; null, если блокировка не удерживается этим владельцем либо бессрочна

On this page

Search results