kohver/redlock-php

此包的最新版本(dev-master)没有可用的许可信息。

PHP 中的 Redis 分布式锁

dev-master 2016-08-31 11:12 UTC

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 值之间。

免责声明:如原文所述,此代码实现了目前为提案的算法,尚未经过正式分析。在使用它于生产环境之前,请确保您理解其工作原理。