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

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

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

推荐文章

Go 单元测试
2024-11-18 19:21:56 +0800 CST
Vue3中的Slots有哪些变化?
2024-11-18 16:34:49 +0800 CST
如何将TypeScript与Vue3结合使用
2024-11-19 01:47:20 +0800 CST
OpenCV 检测与跟踪移动物体
2024-11-18 15:27:01 +0800 CST
JavaScript数组 splice
2024-11-18 20:46:19 +0800 CST
一键压缩图片代码
2024-11-19 00:41:25 +0800 CST
HTML + CSS 实现微信钱包界面
2024-11-18 14:59:25 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
PHP设计模式:单例模式
2024-11-18 18:31:43 +0800 CST
设置mysql支持emoji表情
2024-11-17 04:59:45 +0800 CST
html一些比较人使用的技巧和代码
2024-11-17 05:05:01 +0800 CST
乐观锁和悲观锁,如何区分?
2024-11-19 09:36:53 +0800 CST
Go 开发中的热加载指南
2024-11-18 23:01:27 +0800 CST
Vue3中的v-for指令有什么新特性?
2024-11-18 12:34:09 +0800 CST
如何在Vue中处理动态路由?
2024-11-19 06:09:50 +0800 CST
goctl 技术系列 - Go 模板入门
2024-11-19 04:12:13 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
前端代码规范 - Commit 提交规范
2024-11-18 10:18:08 +0800 CST
Golang 随机公平库 satmihir/fair
2024-11-19 03:28:37 +0800 CST
Vue3 中提供了哪些新的指令
2024-11-19 01:48:20 +0800 CST
支付宝批量转账
2024-11-18 20:26:17 +0800 CST
程序员茄子在线接单