php-lock-system
介绍
基于php的锁机制,仓库地址:https://github.com/d2gin/php-lock-system
软件架构
- php>=7.4
- 基于redis/file锁
- 默认使用的是redis锁
使用说明
- 推荐使用redis锁
- 不推荐复用实例
- 构造函数传入一个可以阻塞进程的唯一key,视业务而定
- 文件锁的key是对应的文件名
- 文件锁运行过程中默认会产生一个名为
icy8/php_lock_system/
的文件夹
- 如果闭包内有结果返回,那么在run方法可以获取到这个结果。
- 安装:
composer require icy8/php-lock-system
已知问题
这个项目主要解决并发引起的数据异常问题,不涉及性能方面。
如果需要上锁的业务代码运行时间超过设定的锁失效时长,那么并发引起的数据问题依然存在,显然,当前项目在这种场景下并不适用。
如果你的业务代码运行超过了3秒甚至更长时间,那么说明你需要优化业务代码提高程序性能,显然,这是另一个层面的问题。
样例
目前只支持闭包运行,请勿传非\Closure类型的参数
- 使用默认参数运行
- redis锁
- redis连接配置
- 文件锁
支持的运行方式
- 通过静态方法调起运行
- 对象
- 函数名
- 其他案例
错误用法
数据库事务
错误例子:
错误改正:
die、exit等终止脚本的函数
因为释放锁是在闭包运行完成后进行的,所以通过这类函数直接退出程序会导致锁无法正确释放掉。
这样会出现不必要的锁释放等待,影响程序效率。
错误例子:
错误改正:
如果业务中必须要用到这类函数,那么建议你在终止脚本前手动释放锁: