web1916/redlock-php

PHP中的Redis分布式锁

维护者

详细信息

github.com/web1916/redlock-php

源代码

资助包维护!
Patreon
Open Collective

2.0.1 2021-09-14 19:03 UTC

This package is not auto-updated.

Last update: 2024-09-26 08:03:04 UTC


README

基于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版本中所述,此代码实现了一个当前为提案的算法,尚未进行正式分析。在使用生产环境之前,请确保理解其工作原理。