PHPackages                             icy8/php-lock-system - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. icy8/php-lock-system

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

icy8/php-lock-system
====================

0.0.2(3y ago)036MITPHPPHP &gt;=7.0

Since Jun 23Pushed 3y ago1 watchersCompare

[ Source](https://github.com/d2gin/php-lock-system)[ Packagist](https://packagist.org/packages/icy8/php-lock-system)[ RSS](/packages/icy8-php-lock-system/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (2)DependenciesVersions (3)Used By (0)

php-lock-system
===============

[](#php-lock-system)

#### 介绍

[](#介绍)

基于php的锁机制

#### 软件架构

[](#软件架构)

1. php&gt;=7.0
2. 基于redis/file锁
3. 默认使用的是redis锁

#### 使用说明

[](#使用说明)

1. 推荐使用redis锁
2. 不推荐复用实例
3. 构造函数传入一个可以阻塞进程的唯一key，视业务而定
4. 文件锁的key是对应的文件名
5. 文件锁运行过程中默认会产生一个名为`icy8/php_lock_system/`的文件夹
6. 如果闭包内有结果返回，那么在run方法可以获取到这个结果。
7. 安装：`composer require icy8/php-lock-system`

#### 已知问题

[](#已知问题)

- 这个项目主要解决并发引起的数据异常问题，不涉及性能方面。
- 如果需要上锁的业务代码运行时间超过设定的锁失效时长，那么并发引起的数据问题依然存在，显然，当前项目在这种场景下并不适用。
- 如果你的业务代码运行超过了3秒甚至更长时间，那么说明你需要优化业务代码提高程序性能，显然，这是另一个层面的问题。

#### 原理解析

[](#原理解析)

1. 当锁存在时另外的进程就需要等待这个锁释放后才能执行相关的事件闭包。即使用`while(true)`等待锁。
2. 默认策略是等待释放锁超时后马上执行事件闭包，即忽略锁，这样操作的后果就是数据依然会有并发问题。
3. 最新一个版本的加入了一个释放锁超时后抛出异常，退出当前程序。这样操作的后果就是这一次请求的数据会丢失

#### 样例

[](#样例)

目前只支持闭包运行，请勿传非\\Closure类型的参数

1. 使用默认参数运行

```
