kelunik / redis-mutex
Installs: 1 817
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 2
Forks: 3
Open Issues: 1
Requires
- amphp/redis: ^0.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- phpunit/phpunit: ^6
README
Distributed mutual exclusion built upon the Amp concurrency framework and Redis.
Basic Example
$mutex = new Mutex(...); // ... try { $token = bin2hex(random_bytes(16)); yield $mutex->lock($sessionId, $token); // Code here will only be executed in one client at a time. // If it takes longer than your specified TTL, you have to // renew the lock, see next example. yield $mutex->unlock($sessionId, $token); } catch (MutexException $e) { // ... }
Renew Example
$mutex = new Mutex(...); $locks = []; Loop::repeat(1000, function () use ($mutex, $locks) { foreach ($locks as $id => $token) { $mutex->renew($id, $token); } }); // ... try { $token = bin2hex(random_bytes(16)); yield $mutex->lock($sessionId, $token); $locks[$sessionId] = $token; // Code here will only be executed in one client at a time. // Your lock will automatically be renewed by the reactor // repeat above. Don't do blocking things here (you should never // do that with Amp anyway), otherwise the reactor will not // be able to schedule the renewal. unset($locks[$sessionId]); yield $mutex->unlock($sessionId, $token); } catch (MutexException $e) { // ... }