php使用文件锁解决并发问题
>
this
php
使用
并发
文件
解决
问题
db
处理
编程技术
发布日期
2022-11-09
更新日期
2022-11-09
阅读次数 81
文章字数 739
使用 LOCK_EX 排他锁,实现 php 并发处理。
为了确保数据正确,在锁中进行读、处理、写等所有操作,视为原子操作。
$fp = fopen(BASE_ROOT."/log/lock.txt", "w+");
// 阻塞(等待)模式, 要取得独占锁定(写入的程序)
if (flock($fp,LOCK_EX)) { //锁定当前指针
//查询 sub_table_list 最后一个分表
$sql = $this->db::SetQuery("select `table_name` from `{$this->sub_table_list}` where `service`='{$this->service}' order by `id` desc limit 1");
$last_table = $this->db->getOne($sql);
//说明没有分表,直接取原表
if(!$last_table){
$last_table = "#@__".$this->service;
}
//查询现有记录数
$sql = $this->db->SetQuery("SELECT COUNT(*) total FROM $last_table");
$res = $this->db->dsqlOper($sql, "results");
$breakup_table_count = 0;
$breakup_table_count = $res[0]['total'];
if(!is_numeric($breakup_table_count)){ //如果异常
return "";
}
if($breakup_table_count >= self::MAX_SUBTABLE_COUNT){
$new_table = $this->createSubTable($aid); //创建分表并保存记录
}
// 处理完成后,再释放锁
flock($fp, LOCK_UN);
}
fclose($fp);
文章作者: 朱丰华
文章链接: https://smart.52dixiaowo.com/blog/post-187.html
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。
>
this
php
使用
并发
文件
解决
问题
db
处理
发表评论
相关推荐