浅谈PHP利用文件锁处理高并发

在解决高并发的情景下,我们除了使用Redis缓存来实现外,利用文件锁也是一种常常使用的方法,下面介绍PHP是如何使用flock()函数对文件进行加锁,从而解决高并发的情况。

1.flock函数的介绍
flock有三个参数分别是:(file,lock,block)
  file:已经打开的文件
  lock:锁的类型
    LOCK_SH:共享锁(读锁)
    LOCK_EX:独占锁定(排它锁,写锁)
    LOCK_UN:解锁
    LOCK_NB:如果希望在文件锁定时阻塞进程,那么需要加上该参数
  block:设置为true的时候,锁定文件时,会阻止其他进程
  
2.使用例子

例1:a使用独占锁写文件,b读取文件,阻塞

a.php

<?php  
$file = 'test.txt';  
$fp = fopen($file, 'w');  
if(flock($fp, LOCK_EX)){
               // 取得独占锁  
    fwrite($fp, "Hello World\r\n"); // 写入数据  
    sleep(10);                      // sleep 10秒,文件被锁定  
    fwrite($fp, "Hello PHP\r\n");   // 写入数据  
    flock($fp, LOCK_UN);            // 解锁  
}  
fclose($fp);  
?>  

b.php

<?php  
$file = 'test.txt';  
$fp = fopen($file, 'r');  
if(flock($fp, LOCK_SH)){
    // 取得贡献锁  
    while
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值