chinlee1523 / redlock-php
此包的最新版本(dev-master)没有可用的许可证信息。
PHP中的Redis分布式锁
dev-master
2018-04-25 13:03 UTC
Requires
- php: >=5.4
- ext-redis: >=2.2.5
This package is not auto-updated.
Last update: 2024-10-03 01:02:49 UTC
README
redlock-php - PHP中的Redis分布式锁
基于 Redlock-rb,由 Salvatore Sanfilippo 开发
此库实现了基于Redis的分布式锁管理器算法,该算法在这篇博客文章中进行了描述。
创建锁管理器
$servers = [ ['127.0.0.1', 6379, 0.01], ['127.0.0.1', 6389, 0.01], ['127.0.0.1', 6399, 0.01], ]; $redLock = new RedLock($servers);
获取锁
$lock = $redLock->lock('my_resource_name', 1000);
资源名称是要尝试锁定的唯一标识符,1000是锁的有效时间(毫秒)。
如果没有获取到锁,则返回值为false(您可以再次尝试),否则返回一个包含三个键的数组表示锁:
Array ( [validity] => 9897.3020019531 [resource] => my_resource_name [token] => 53771bfa1e775 )
- validity,一个整数,表示锁的有效时间(毫秒)。
- resource,用户指定的锁定资源的名称。
- token,一个随机令牌值,用于安全地重新获取锁。
释放锁
$redLock->unlock($lock)
可以设置获取锁时重试的次数(默认3次)和重试延迟(默认200毫秒)。
重试延迟实际上是在$retryDelay / 2毫秒和指定的$retryDelay值之间随机选择的。
免责声明:正如原始antirez版本中所述,此代码实现了一个目前为提案的算法,它尚未经过正式分析。在使用此代码投入生产环境之前,请确保您理解其工作原理。