php分布式的锁,laravel分布式并发锁
環境要求
1.PHP >= 7
2.composer
3.redis(必須支持lua)
4.predis
composer 安裝
redis 安裝
predis 安裝
composer require predis/predis
lock 安裝
第一步, 安裝alravel-lock
composer require nabao/laravel-lock
第二步, 生成配置文件
php artisan vendor:publish --provider="Lock\LockServiceProvider"
搶占鎖
lock(callable $callback, string $lock_val)
多進程并發時, 其中某一個進程得到鎖后, 其他進程將被拒絕
$callback
回調函數, 可返回值
$lock_val
鎖定值
多參數搶占鎖
lock(callable $callback, array $lock_vals)
多進程并發時, 其中某一個進程得到鎖后, 其他進程將被拒絕
$callback
回調函數, 可返回值
$lock_vals
鎖定值(數組)
隊列鎖
queueLock($closure, $lock_val, $max_queue_process = 100)
多進程并發時, 其中某一個進程得到鎖后, 其他進程將等待解鎖(配置最大等待進程后, 超過等待數量后進程將被拒絕)
$callback
回調函數, 可返回值
$lock_val
鎖定值
$max_queue_process
隊列最大等待進程
多參數隊列鎖
queueLock($closure, $lock_vals, $max_queue_process = 100)
多進程并發時, 其中某一個進程得到鎖后, 其他進程將等待解鎖(配置最大等待進程后, 超過等待數量后進程將被拒絕)
$callback
回調函數, 可返回值
$lock_vals
鎖定值(數組)
$max_queue_process
隊列最大等待進程
使用
//靜態調用
$lock_val = 'user:pay:1';
Lock::lock(function($redis){
echo 'hello world!';
}, $lock_val);
//實例化調用
$lock = new Lock();
$lock_val = 'user:pay:1';
$lock->lock(function($redis){
echo 'hello world!';
}, $lock_val);
//多參數鎖
$lock = new Lock();
$lock_val[] = 'user:pay:1';
$lock_val[] = 'user:pay:2';
$lock->lock(function($redis){
echo 'hello world!';
}, $lock_val);
限流
isActionAllowed($key, $period, $max_count)
$key 限制key
$period 限制時間(秒)
$max_count 限制時間內最大數量
config配置
/*
|--------------------------------------------------------------------------
| lock配置文件
|--------------------------------------------------------------------------
|
|drive 鎖驅動(默認redis)
|
|redis redis驅動配置
| host 地址
| port 端口
|
|params 參數配置
| max_queue_process 進程池最大進程
| expiration 鎖值過期時間
|
*/
'drive' => 'redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
'read_write_timeout' => 0,
'persistent' => true,
],
'params' => [
'max_queue_process' => 100,
'expiration' => 5
]
laravel-lock
總結
以上是生活随笔為你收集整理的php分布式的锁,laravel分布式并发锁的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: camelcase_在Python中将字
- 下一篇: php数据类型_PHP数据类型能力问题和