编程 php使用文件锁解决少量并发问题

2024-11-17 05:07:57 +0800 CST views 2484

php使用文件锁解决少量并发问题

先写一个函数来检测

function create_sn(){
	mt_srand((double)microtime() * 1000000);
	return date('Y-m-d H:i:s.').str_pad(mt_rand(1, 99999), 5, '0', STR_PAD_LEFT);
}

并发生成单号.png

先看一张没有使用文件锁的并发截图,看截图我们知道如果在并发状态下是存在重复的时间的。

#非阻塞模式:

$fp = fopen("lock.txt", "r");
if(flock($fp,LOCK_EX | LOCK_NB))
{
    echo create_sn();
    flock($fp,LOCK_UN);
}else
{
    echo "系统繁忙,请稍后再试";
}
fclose($fp);

#阻塞(等待)模式:

$fp = fopen("lock.txt", "w");
if(flock($fp,LOCK_EX))
{
    echo create_sn();
    flock($fp,LOCK_UN);
}
fclose($fp);

ps:文件锁只适合在小并发情况下使用。大流量并发使用redis我们下次说。

复制全文 生成海报 编程 并发控制 PHP

推荐文章

Vue3中如何实现响应式数据?
2024-11-18 10:15:48 +0800 CST
PHP 压缩包脚本功能说明
2024-11-19 03:35:29 +0800 CST
Vue3结合Driver.js实现新手指引功能
2024-11-19 08:46:50 +0800 CST
前端项目中图片的使用规范
2024-11-19 09:30:04 +0800 CST
Golang实现的交互Shell
2024-11-19 04:05:20 +0800 CST
Nginx 防盗链配置
2024-11-19 07:52:58 +0800 CST
php 统一接受回调的方案
2024-11-19 03:21:07 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
GROMACS:一个美轮美奂的C++库
2024-11-18 19:43:29 +0800 CST
JavaScript设计模式:适配器模式
2024-11-18 17:51:43 +0800 CST
PHP 命令行模式后台执行指南
2025-05-14 10:05:31 +0800 CST
JavaScript数组 splice
2024-11-18 20:46:19 +0800 CST
Golang Select 的使用及基本实现
2024-11-18 13:48:21 +0800 CST
gin整合go-assets进行打包模版文件
2024-11-18 09:48:51 +0800 CST
Vue中如何处理异步更新DOM?
2024-11-18 22:38:53 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
如何在Vue 3中使用Ref访问DOM元素
2024-11-17 04:22:38 +0800 CST
Go配置镜像源代理
2024-11-19 09:10:35 +0800 CST
程序员茄子在线接单