php 并发 读写文件冲突的解决实例

本文介绍了如何解决PHP在并发环境下读写文件时可能出现的冲突问题。核心思路是通过增加临时写入文件的数量,利用随机读写来分散并发,从而降低冲突概率。文中提供了一个具体的PHP代码实例,展示了如何实现这一解决方案。
摘要由CSDN通过智能技术生成

php 并发 读写文件冲突的解决方案

解决方案核心思想:

增加 临时写入文件数目,对众多临时文件文件进行随机读写,以降低并发的可能性。

实例:

在对用户访问日志进行记录时,这种方案似乎被采用的比较多。
先前需要定义一个随机空间,空间越大,并发的的可能性就越小,这里假设随机读写空间为[1-500],那么我们的日志文件的分布就为log1~到log500不等。每一次用户访问,都将数据随机写到log1~log500之间的任一文件。在同一时刻,有2个进程进行记录日志,A进程可能是更新的log32文件,而B进程呢?则此时更新的可能就为log399.要知道,如果要让B进程也操作log32,概率基本上为1/500,差不多约等于零。在需要对访问日志进行分析时,这里我们只需要先将这些日志合并,再进行分析即可。使用这种方案来记录日志的一个好处时,进程操作排队的可能性比较小,可以使进程很迅速的完成每一次操作。

php代码实例:

<?php 
error_reporting(E_ALL || ~E_NOTICE);//报错屏蔽设置
date_default_timezone_set('PRC');//设置默认时区

$randam1 = rand(1,10);
$randam2 = rand(1,10);
$file1 = "spark_sql_data"."_".$randam1.".json";
$file2 = "spark_sql_tanzhen"."_".$randam2.".json";

$fp1 = fopen($file1,"a+");
$fp2 = fopen($file2,"a+");
//..........
//中间逻辑代码
//..........
 flock($fp1,LOCK_EX);
 fwrite($fp1,$detail_infor_json);
flock($fp1,LOCK_UN);

flock($fp2,LOCK_EX);
fwrite($fp2,$tanzhen_infor_json);
flock($fp2,LOCK_UN);


 fclose($file1);
 fclose($file2);
?>

结果展示:


这里写图片描述

完整代码展示(高端玩家选读):

<?php 
error_reporting(E_ALL || ~E_NOTICE);//报错屏蔽设置
date_default_timezone_set('PRC');//设置默认时区

$randam1 = rand(1,10);
$randam2 = rand(1,10);
$file1 = "spark_sql_data"."_".$randam1.".json"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值