Download the PHP package icy8/php-lock-system without Composer
On this page you can find all versions of the php package icy8/php-lock-system. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Please rate this library. Is it a good library?
Informations about the package php-lock-system
php-lock-system
介绍
基于php的锁机制
软件架构
- php>=7.0
- 基于redis/file锁
- 默认使用的是redis锁
使用说明
- 推荐使用redis锁
- 不推荐复用实例
- 构造函数传入一个可以阻塞进程的唯一key,视业务而定
- 文件锁的key是对应的文件名
- 文件锁运行过程中默认会产生一个名为
icy8/php_lock_system/
的文件夹 - 如果闭包内有结果返回,那么在run方法可以获取到这个结果。
- 安装:
composer require icy8/php-lock-system
已知问题
-
这个项目主要解决并发引起的数据异常问题,不涉及性能方面。
-
如果需要上锁的业务代码运行时间超过设定的锁失效时长,那么并发引起的数据问题依然存在,显然,当前项目在这种场景下并不适用。
- 如果你的业务代码运行超过了3秒甚至更长时间,那么说明你需要优化业务代码提高程序性能,显然,这是另一个层面的问题。
原理解析
- 当锁存在时另外的进程就需要等待这个锁释放后才能执行相关的事件闭包。即使用
while(true)
等待锁。 - 默认策略是等待释放锁超时后马上执行事件闭包,即忽略锁,这样操作的后果就是数据依然会有并发问题。
- 最新一个版本的加入了一个释放锁超时后抛出异常,退出当前程序。这样操作的后果就是这一次请求的数据会丢失
样例
目前只支持闭包运行,请勿传非\Closure类型的参数
-
使用默认参数运行
-
redis锁
-
redis连接配置
- 文件锁
支持的运行方式
-
通过静态方法调起运行
-
对象
-
函数名
-
其他案例
- 锁超时后抛出异常
错误用法
-
数据库事务
错误例子:
错误改正:
-
die、exit等终止脚本的函数
因为释放锁是在闭包运行完成后进行的,所以通过这类函数直接退出程序会导致锁无法正确释放掉。 这样会出现不必要的锁释放等待,影响程序效率。
错误例子:
错误改正:
如果业务中必须要用到这类函数,那么建议你在终止脚本前手动释放锁:
All versions of php-lock-system with dependencies
PHP Build Version
Package Version
Requires
php Version
>=7.0
The package icy8/php-lock-system contains the following files
Loading the files please wait ....