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 处理

发表评论

相关推荐
朱丰华   |   7个月前   |   php

php判断是否被iframe

221    评论    点赞
朱丰华   |   1年前   |   checkbox

checkbox默认传值问题

389    评论    点赞
朱丰华   |   1年前   |   linux

linux保持后台进程不被关闭nohup &

254    评论    点赞
朱丰华   |   1年前   |   php

php正则表达式定界符:异常Delimiter must not be alphanumeric or backslash

190    评论    点赞
朱丰华   |   1年前   |   sql · mysql

mysql Timestamp或dateTime格式筛选

126    评论    点赞
朱丰华   |   1年前   |   请求 · 一个

ab测压命令,apache测压工具

172    评论    点赞
朱丰华   |   1年前   |   php · 缓存 · opcache

php 加速、提高并发opcache

198    评论    点赞
朱丰华   |   1年前   |   < · iframe

让iframe嵌入的视频自适应 (100%宽度)?

122    评论    点赞
朱丰华   |   1年前   |   js · 重复

js如何避免重复监听addEventListener事件?

124    评论    点赞
朱丰华   |   1年前   |   正则 · 表达

正则表达式,实现if...then...else

113    评论    点赞
朱丰华   |   1年前   |   变量 · mysql · sql · 用户

MySQL用户自定义变量

95    评论    点赞
朱丰华   |   1年前   |   sql · php

PHP如何使用PDO批量执行SQL?

115    评论    点赞
朱丰华   |   1年前   |   sed · 文件

Shell 指定行处理head、tail、sed

156    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 字符串

如何在 PHP 中将字符串的第一个字母转换为大写

150    评论    点赞
朱丰华   |   1年前   |   php · 字符 · 正则

php正则表达式原生字符

86    评论    点赞
朱丰华   |   1年前   |   html · <

html浏览器当前tab标签切换时触发监听

106    评论    点赞
朱丰华   |   1年前   |   字符 · php · 比较

PHP比较字符串大小相关函数

111    评论    点赞
朱丰华   |   1年前   |   javascript · 滚动 · html

Javascript 显示当前滚动条滚动的百分比

74    评论    点赞
朱丰华   |   1年前   |   html · id · <

html同一个页面有两个相同id ,如何用id选择器选中

109    评论    点赞
朱丰华   |   1年前   |   文件 · linux · 修改

linux文件的三个时间atime,mtime,ctime分别表示什么?

275    评论    点赞
{{item.author_name}}   |   {{new Date(item.date*1000).log()}}   |   {{it}} ·

{{item.title}}

{{item.uv}}    评论    点赞