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

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

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

推荐文章

在 Rust 中使用 OpenCV 进行绘图
2024-11-19 06:58:07 +0800 CST
markdowns滚动事件
2024-11-19 10:07:32 +0800 CST
Nginx 实操指南:从入门到精通
2024-11-19 04:16:19 +0800 CST
Vue3中怎样处理组件引用?
2024-11-18 23:17:15 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
Vue3 vue-office 插件实现 Word 预览
2024-11-19 02:19:34 +0800 CST
PostgreSQL日常运维命令总结分享
2024-11-18 06:58:22 +0800 CST
deepcopy一个Go语言的深拷贝工具库
2024-11-18 18:17:40 +0800 CST
js生成器函数
2024-11-18 15:21:08 +0800 CST
robots.txt 的写法及用法
2024-11-19 01:44:21 +0800 CST
如何优化网页的 SEO 架构
2024-11-18 14:32:08 +0800 CST
`Blob` 与 `File` 的关系
2025-05-11 23:45:58 +0800 CST
H5保险购买与投诉意见
2024-11-19 03:48:35 +0800 CST
服务器购买推荐
2024-11-18 23:48:02 +0800 CST
从Go开发者的视角看Rust
2024-11-18 11:49:49 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
程序员茄子在线接单