InMemoryStore
in package
implements
LockStore, TtlAwareStore
Хранилище блокировок в памяти процесса.
Блокировки живут в приватном массиве и исчезают вместе с процессом — подходит для координации в пределах одного запроса/процесса и для тестов. В рамках одного 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, если блокировка не
удерживается этим владельцем либо бессрочна