mmdtl / autolock
PHP 的 Redis 分布式锁
0.1.0
2017-03-28 11:45 UTC
Requires
- php: ^5.3|^7.0
- ext-redis: ^2.2.5|^3.0.0
Requires (Dev)
- phpunit/phpunit: ^4.8|^5.7|^6.0
This package is not auto-updated.
Last update: 2024-09-29 02:52:01 UTC
README
AutoLock - PHP 中的 Redis 分布式锁
此库实现了由 @antirez 提出的 RedLock 算法。
此库实现了基于 Redis 的分布式锁管理器算法,该算法在这篇博客文章中描述。
创建锁管理器
$pool = new \AutoLock\Pool(array( '192.168.1.1:6379', '192.168.1.2:6379', '192.168.1.3:6379', ),new \AutoLock\Drivers\PHPRedis()); $manager = new \AutoLock\Manager($pool);
获取锁
$lock = $manager->lock('distributed_lock',1000);;
资源名称是您尝试加锁的资源的唯一标识符,1000 是锁的有效时间(毫秒数)。
如果未获取到锁,则返回值是 false
(您可能需要再次尝试),否则返回一个表示锁的对象。您应使用 isExpired 方法来检测锁是否已过期或将在某个时间点过期。
$status = $lock->isExpired(); //$status will be true if the lock is expired or it will be false $status = $lock->isExpired(3600 * 1000); //$status will be true if the lock will be expired after 3600 seconds or it will be false
- validity,一个表示锁有效时间的整数。
- resource,用户指定的已锁定资源名称。
- token,一个用于安全回收锁的随机令牌值。
释放锁
$lock->unlock($lock)
您可以为获取锁设置重试次数(默认为 3)和重试延迟(默认为 200 毫秒)。
重试延迟实际上是在 $retryDelay / 2
毫秒和指定的 $retryDelay
值之间随机选择的。