kelunik / redis-mutex
v0.2.2
2019-01-20 21:25 UTC
Requires
- amphp/redis: ^0.3
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.3
- phpunit/phpunit: ^6
README
基本示例
$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) { // ... }
更新示例
$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) { // ... }