Skip to content
zhaocong6 edited this page Apr 9, 2018 · 1 revision

开始使用

请安装好所有依赖,并且成功hello world

lock() 抢占锁

适用环境

在同一时间不能有两次并发的系统,如:用户支付,用户抽奖
拒绝恶意用户的并发请求

参数

lock(closure $closure, string $lock_val, int $expiration = 60);

$closure
    匿名闭包, 需要锁的代码块(注意: 在锁内执行耗时任务会影响系统并发, 建议将不必要的程序放在闭包外执行)    
$lock_val
    'user:pay:1' user是用户模块 pay是用户模块下的支付模块 1是用户id
    该锁含义:锁住用户1的所有支付行为

    'user:pay'
    该锁含义:锁住所有用户模块支付功能

$expiration
    单个锁进程的最大占锁时间,防止死锁

特点:性能好, 并发高
缺点:当一个进程获得抢占锁后,其他进程将全被拒绝

queueLock() 队列锁

适用环境

在同一时间允许多次并发的系统,如:秒杀
为了提升接口性能, 建议和异步队列配合使用

参数

queueLock(closure $closure, string $lock_val, int $expiration = 60, int $max_queue_process = 100, int $wait_time);

$closure
    匿名闭包, 需要锁的代码块(注意: 在锁内执行耗时任务会影响系统并发, 建议将不必要的程序放在闭包外执行)    
$lock_val
    'user:pay:1' user是用户模块 pay是用户模块下的支付模块 1是用户id
    该锁含义:锁住用户1的所有支付行为

    'user:pay'
    该锁含义:锁住所有用户模块支付功能

$expiration
    单个锁进程的最大占锁时间,防止死锁
$max_queue_process
    队列进程池, 根据接口最大并发而定(一般比最大并发小).接口安全机制,超过队列池的进程会被拒绝,保证系统稳定性.
$wait_time
    进程等待周期时间(微妙)        

特点:适用于需要排队的系统, 当一个进程获得锁后,其他进程将排队(排队会有队列池,超过队列池的进程会被拒绝,保证系统稳定性)
缺点:性能低
Clone this wiki locally