class ConcurrencyLimiter (View source)

Properties

protected Connection $redis

The Redis factory implementation.

protected string $name

The name of the limiter.

protected int $maxLocks

The allowed number of concurrent tasks.

protected int $releaseAfter

The number of seconds a slot should be maintained.

Methods

void
__construct(Connection $redis, string $name, int $maxLocks, int $releaseAfter)

Create a new concurrency limiter instance.

bool
block(int $timeout, callable|null $callback = null)

Attempt to acquire the lock for the given number of seconds.

mixed
acquire(string $id)

Attempt to acquire the lock.

string
lockScript()

Get the Lua script for acquiring a lock.

void
release(string $key, string $id)

Release the lock.

string
releaseScript()

Get the Lua script to atomically release a lock.

Details

void __construct(Connection $redis, string $name, int $maxLocks, int $releaseAfter)

Create a new concurrency limiter instance.

Parameters

Connection $redis
string $name
int $maxLocks
int $releaseAfter

Return Value

void

bool block(int $timeout, callable|null $callback = null)

Attempt to acquire the lock for the given number of seconds.

Parameters

int $timeout
callable|null $callback

Return Value

bool

Exceptions

LimiterTimeoutException
Exception

protected mixed acquire(string $id)

Attempt to acquire the lock.

Parameters

string $id

A unique identifier for this lock

Return Value

mixed

protected string lockScript()

Get the Lua script for acquiring a lock.

KEYS - The keys that represent available slots ARGV[1] - The limiter name ARGV[2] - The number of seconds the slot should be reserved ARGV[3] - The unique identifier for this lock

Return Value

string

protected void release(string $key, string $id)

Release the lock.

Parameters

string $key
string $id

Return Value

void

protected string releaseScript()

Get the Lua script to atomically release a lock.

KEYS[1] - The name of the lock ARGV[1] - The unique identifier for this lock

Return Value

string