kohver / redlock-php
此包的最新版本(dev-master)没有可用的许可信息。
PHP 中的 Redis 分布式锁
dev-master
2016-08-31 11:12 UTC
Requires
- php: ~5.4
- predis/predis: ^1.1
This package is not auto-updated.
Last update: 2024-09-18 18:38:44 UTC
README
redlock-php - PHP 中的 Redis 分布式锁
基于 Redlock-rb,由 Salvatore Sanfilippo 开发
该库实现了基于 Redis 的分布式锁管理器算法,该算法在这篇博客文章中描述。
创建锁管理器
$RedLock = new RedLock([ new Client(['host' => '127.0.0.1', 'port' => 6379, 'timeout' => 0.01]), new Client(['host' => '127.0.0.1', 'port' => 6380, 'timeout' => 0.01]), new Client(['host' => '127.0.0.1', 'port' => 6381, 'timeout' => 0.01]), ]);
获取锁
$lock = $RedLock->lock('my_resource_name', 1000);
资源名称是您要尝试锁定的资源的唯一标识符,1000 是锁的有效时间(毫秒)。
如果未获取到锁,将抛出 LockTimeoutException
异常,否则返回一个 Lock
实例,具有以下三个方法
getValidity
,一个表示锁将有效的毫秒数的整数。getResource
,用户指定的已锁资源的名称。getToken
,一个随机令牌值,用于安全地回收锁。
释放锁
$RedLock->unlock($lock)
可以设置用于获取锁的重试次数(默认为 3)和重试延迟(默认为 200 毫秒)。
重试延迟实际上是随机选择的,在 $retryDelay / 2
毫秒和指定的 $retryDelay
值之间。
免责声明:如原文所述,此代码实现了目前为提案的算法,尚未经过正式分析。在使用它于生产环境之前,请确保您理解其工作原理。