php文件锁并发 性能,php文件锁类防止并发

工作间隙写了个文件锁的类,用于解决并发的一些问题。

/**

* 用于解决PHP在并发时候的锁控制,不同的锁之间并行执行,类似mysql innodb的行级锁

* @author www.phpernote.com

*/

class FileLock{

//文件锁存放路径

private $path='';

//文件句柄

private $fp='';

//锁文件

private $lockFile='';

/**

* 构造函数

* @param string $path 锁的存放目录

* @param string $name 锁 KEY

*/

public function __construct($name,$path=''){

if(empty($path)) $this->path=dirname(__FILE__).'/';

else $this->path=$path;

$this->lockFile=$this->path.md5($name).'.lock';

}

/**

* 加锁

*/

public function lock(){

$this->fp=fopen($this->lockFile,'a+');

if($this->fp===false){

return false;

}

return flock($this->fp,LOCK_EX);//获取独占锁

}

/**

* 解锁

*/

public function unlock(){

if($this->fp!==false){

@flock($this->fp,LOCK_UN);

clearstatcache();

}

@fclose($this->fp);

@unlink($this->lockFile);

}

}

文件锁类使用示例:

$userid=21;

$article_id=108;

//对业务请求加锁

$lock=new FileLock($userid.$article_id);

$lockResult=$lock->lock();

if(!$lockResult){

echo '当前请求速度过快,请稍后访问!';

$lock->unlock();

exit;

}

/*

正常的业务逻辑处理

*/

//业务逻辑处理完毕解锁

$lock->unlock();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值