文件排他锁解决小型并发
发表于|更新于
|字数总计:251|阅读时长:1分钟|阅读量:|
众所周知,并发容易造成数据重复处理或者商品超卖等等情况; 如果使用数据库排他锁消耗的资源相对较高,那么这时可考虑使用文件排他锁。
阻塞(等待)模式:
并发时,当有第二个用户请求时,会等待第一个用户请求完成、释放锁,获得文件锁之后,程序才会继续运行下去。
1 2 3 4 5 6 7 8 9
| <?php $fp = fopen('lock.txt', 'w'); if(flock($fp, LOCK_EX)){ //文件独占锁,阻塞 //TODO 业务代码... flock($fp, LOCK_UN); //释放锁 } fclose($fp); ?>
|
非阻塞模式:
并发时,当第一个用户请求拿得文件锁之后。后面请求的用户直接返回系统繁忙,请稍后再试。
1 2 3 4 5 6 7 8 9 10 11
| <?php $fp = fopen('lock.txt', 'w'); if(flock($fp, LOCK_EX|LOCK_NB)){ //文件独占锁,非阻塞 //TODO 业务代码... flock($fp, LOCK_UN);//释放锁 }else{ //系统繁忙,请稍后再试(直接返回提示) } fclose($fp); ?>
|