# think-lock
thinkphp6+ lock based on symfony lock
<p>
<a href="https://packagist.org/packages/isszz/think-lock"><img src="https://img.shields.io/badge/php->=8.0-8892BF.svg" alt="Minimum PHP Version"></a>
<a href="https://packagist.org/packages/isszz/think-lock"><img src="https://img.shields.io/badge/thinkphp->=6.x-8892BF.svg" alt="Minimum Thinkphp Version"></a>
<a href="https://packagist.org/packages/isszz/think-lock"><img src="https://poser.pugx.org/isszz/think-lock/v/stable" alt="Stable Version"></a>
<a href="https://packagist.org/packages/isszz/think-lock"><img src="https://poser.pugx.org/isszz/think-lock/downloads" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/isszz/think-lock"><img src="https://poser.pugx.org/isszz/think-lock/license" alt="License"></a>
</p>
## 安装
```shell
composer require isszz/think-lock
```
## 说明
目前支持 `File`,`Redis`,`PDO`驱动,安装后可在`config/locker.php`配置。
建议使用`Redis`或者`PDO`驱动
## 配置
```php
<?php
return [
'driver' => 'redis', // file|redis|pdo,建议使用redi或pdo,file不支持ttl
'drivers' => [
'file' => [
'path' => runtime_path('lock'), // 锁存储路径
],
// 未配置时使用tp缓存类的redis,如果是默认配置且在同一个库建议留空
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'password' => '',
'select' => 0,
],
// 使用pdo驱动时,数据库表和字段是自动创建无需自行处理
'pdo' => [
// 获取thinkphp的数据库配置
'database' => config('database.connections.'. config('database.default', 'mysql')),
// 自行设置数据库配置
/*
'database' => [
// 必须配置的参数
'database' => '', // 数据库
'password' => '', // 数据库密码
// 可选配置参数
'username' => 'root',
'hostname' => '127.0.0.1',
'hostport' => '3306',
'charset' => 'utf8mb4',
'prefix' => '', // 表前缀
],
*/
// 如果表名, 和字段需要自定义, 则在这里配置
/*
'table' => 'lock_keys', // 表名
'id' => 'key_id', // 锁ID
'token' => 'key_token', // 锁token
'expiration' => 'key_expiration', // 锁有效期
*/
],
],
'ttl' => 300, // 默认锁超时时间
'auto_release' => true, // 是否自动释放,建议设置为 true
'prefix' => 'think_lock_', // 锁key前缀
];
```
## 使用
facade方式
```php
use think\lock\facade\Locker;
class Index
{
public function add()
{
$locker = Locker::lock('test', ttl: 5);
if (!$locker->acquire()) {
return json(['code' => 1, 'msg' => '操作太频繁,请稍后再试']);
}
try {
sleep(5);
// 具体的操作代码
return json(['code' => 0, 'msg' => '进行了一些操作']);
} finally {
// 解锁
$locker->release();
}
return json(['code' => 0, 'msg' => 'success']);
}
}
```
依赖注入方式
```php
use think\lock\Locker;
class Index
{
public function add(Locker $locker)
{
$locker = $locker->lock('test', ttl: 5);
// ...
}
}
```
## 更多操作参考 symfony/lock 文档
https://symfony.com/doc/current/components/lock.html
thinkphp8操作锁,防止短时间内多次提交,兼容tp6
版权申诉
137 浏览量
2023-08-06
13:57:20
上传
评论
收藏 9KB ZIP 举报
程序员柳
- 粉丝: 6507
- 资源: 1397
最新资源
- java(结合lucene)版的公交搜索系统
- 【OpenHarmony】ArkTS 语法基础 ④ ( ArkTS UI 渲染控制 - 条件渲染 - 循环渲染 )
- 稽查监控平台标准化设计数据模型设计
- 一款极好用的 Office/WPS/Word/Excel/PPT/PDF工具箱软件 OfficeUtils 2.7
- 基于STM32的家庭环境参数检测系统设计
- 夺宝答题王答题小程序源码 开源可二开 Thinkphp内核
- Linux 系统下 Hadoop 安装配置教程.md
- 用于 CH32 MCU 的 CMake 实用程序(基于 STM32-CMake Proejct
- Linux 系统下 Hadoop 安装配置教程.md
- 基于ESO的 PMSM无传感器控制仿真-Matlab 2021b
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈