kcyeu/php-redlock

PHP 的 Redis 分布式锁

维护者

详细信息

github.com/kcyeu/php-redlock

源代码

安装: 14

依赖: 1

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 210

dev-master 2015-03-31 02:22 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:12:38 UTC


README

PHP 的 Redis 分布式锁

基于 Redlock-rbSalvatore SanfilippoRedlock-phpRonny López 开发。此库实现了基于 Redis 的分布式锁管理算法,该算法在这篇博客文章中描述。

支持使用 phpredis PECL 扩展进行集群模式。

创建锁管理器

$servers = array(
    array('127.0.0.1', 6379),
    array('127.0.0.1', 6380),
    array('127.0.0.1', 6381),
);

$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 版本中所述,此代码实现了目前尚为提案的算法,未经正式分析。在使用生产环境之前,请务必了解其工作原理。