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

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

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

推荐文章

LangChain快速上手
2025-03-09 22:30:10 +0800 CST
2024年公司官方网站建设费用解析
2024-11-18 20:21:19 +0800 CST
软件定制开发流程
2024-11-19 05:52:28 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
百度开源压测工具 dperf
2024-11-18 16:50:58 +0800 CST
淘宝npm镜像使用方法
2024-11-18 23:50:48 +0800 CST
Requests库详细介绍
2024-11-18 05:53:37 +0800 CST
Vue3 结合 Driver.js 实现新手指引
2024-11-18 19:30:14 +0800 CST
api远程把word文件转换为pdf
2024-11-19 03:48:33 +0800 CST
markdown语法
2024-11-18 18:38:43 +0800 CST
windows下mysql使用source导入数据
2024-11-17 05:03:50 +0800 CST
Rust async/await 异步运行时
2024-11-18 19:04:17 +0800 CST
CSS 特效与资源推荐
2024-11-19 00:43:31 +0800 CST
宝塔面板 Nginx 服务管理命令
2024-11-18 17:26:26 +0800 CST
Nginx 反向代理
2024-11-19 08:02:10 +0800 CST
Hypothesis是一个强大的Python测试库
2024-11-19 04:31:30 +0800 CST
一些实用的前端开发工具网站
2024-11-18 14:30:55 +0800 CST
底部导航栏
2024-11-19 01:12:32 +0800 CST
使用Vue 3实现无刷新数据加载
2024-11-18 17:48:20 +0800 CST
PHP 允许跨域的终极解决办法
2024-11-19 08:12:52 +0800 CST
7种Go语言生成唯一ID的实用方法
2024-11-19 05:22:50 +0800 CST
程序员茄子在线接单