signe / redlock-php
此包的最新版本(1.1.0)没有提供许可证信息。
PHP中的Redis分布式锁
1.1.0
2018-11-27 19:27 UTC
Requires
- php: >= 7.0
- ext-openssl: *
- ext-redis: *
Requires (Dev)
- phpunit/phpunit: 4.4.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:33 UTC
README
redlock-php - PHP中的Redis分布式锁
基于 Redlock-rb,由 Salvatore Sanfilippo 编写,是 ronnylt/redlock-php 的后继者,后者在2015年初已废弃。
此库实现了基于Redis的分布式锁管理器算法,该算法在Redis文章中有描述。
创建锁管理器
可以使用由服务器名称(必需)、连接端口(可选)和连接超时(可选)组成的数组形式的服务器元组来提供锁,或者使用已经连接的Redis对象。
$server = new \Redis; $server->connect('127.0.0.1'); $servers = [ ['127.0.0.1', 6379, 0.01], ['127.0.0.1'], $server, ]; $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版本所述,此代码实现了一个当前为提案的算法,尚未进行正式分析。在使用生产环境之前,请确保理解其工作原理。