LockStore
in
Хранилище блокировок: единая абстракция над механизмами взаимного исключения (файловые `flock`, кэш с TTL, память процесса), поверх которой работает {@see \CloudCastle\Lock\Lock}.
Блокировка идентифицируется ключом ресурса и удерживается конкретным владельцем — уникальным токеном. Только владелец может продлить или снять свою блокировку, что защищает от случайного снятия чужой (например, если исходный держатель «завис», а его блокировка уже истекла по TTL и перешла к другому).
Срок жизни ($ttlSeconds) задаёт автоматическое истечение для хранилищ с TTL
(кэш, память); файловые блокировки (flock) удерживаются до явного снятия или
завершения процесса, поэтому TTL для них игнорируется.
Table of Contents
Methods
- acquire() : bool
- Попытаться захватить блокировку без ожидания (неблокирующе).
- isAcquired() : bool
- Удерживается ли блокировка (любым владельцем) в данный момент.
- refresh() : bool
- Продлить срок жизни блокировки, удерживаемой этим владельцем.
- release() : void
- Снять блокировку, если она принадлежит этому владельцу.
Methods
acquire()
Попытаться захватить блокировку без ожидания (неблокирующе).
public
acquire(string $key, string $owner, int|null $ttlSeconds) : bool
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
уникальный токен владельца
- $ttlSeconds : int|null
-
срок жизни в секундах для хранилищ с TTL;
null— до явного снятия
Return values
bool —true, если блокировка захвачена этим владельцем; false,
если она уже удерживается кем-то другим
isAcquired()
Удерживается ли блокировка (любым владельцем) в данный момент.
public
isAcquired(string $key) : bool
Parameters
- $key : string
-
ключ ресурса
Return values
bool —true, если ресурс заблокирован и блокировка не истекла
refresh()
Продлить срок жизни блокировки, удерживаемой этим владельцем.
public
refresh(string $key, string $owner, int|null $ttlSeconds) : bool
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
токен владельца
- $ttlSeconds : int|null
-
новый срок жизни в секундах;
null— бессрочно
Return values
bool —true, если блокировка принадлежит владельцу и продлена
release()
Снять блокировку, если она принадлежит этому владельцу.
public
release(string $key, string $owner) : void
Снятие чужой блокировки — «тихая» операция без эффекта: посторонний токен не может освободить ресурс.
Parameters
- $key : string
-
ключ ресурса
- $owner : string
-
токен владельца