Distributed PHP counting semaphore implementation, using redis as a broker
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Redis counting semaphore Latest Stable Version Total Downloads License composer.lock

redis-counting-semaphore is a package with a counting semaphore implementation for PHP. It uses redis as a central broker.


To install redis-counting-semaphore with composer:

composer require code-orange/redis-counting-semaphore


First, make sure you have a Predis connection instance.

You can create and attempt to obtain a semaphore like so:

use CodeOrange\RedisCountingSemaphore\Semaphore;

$client = new Predis\Client();

// Create a counting semaphore with a limit of 3
$sem = new Semaphore($client, 'semaphore-name', 3);
if ($sem->acquire(0.1, 10)) {
	// Obtained the semaphore
} else {
	// We weren't able to get a semaphore, even though we tried 10 times
	// And slept for 0.1 seconds in between tries


 * Semaphore constructor.
 * @param Client $client Predis client with an open connection
 * @param string $name Name of the semaphore
 * @param int $limit The amount of resources this semaphore protects
 * @param int $timeout Timeout of an acquired semaphore, in seconds
public Semaphore(Client $client, $name, $limit = 1, $timeout = 10);

 * Try to acquire a semaphore
 * @param float $sleep Number of seconds to sleep between retries. If null, this function will not retry but return immediately.
 * @param int $retries Number of times to retry before giving up
 * @return bool Whether or not the semaphore was acquired correctly
public function acquire($sleep = null, $retries = null);

 * Release this semaphore
 * @return void
public function release();

 * Refresh the semaphore
 * @return bool Whether or not we still have the semaphore
public function refresh();