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

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

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

推荐文章

网站日志分析脚本
2024-11-19 03:48:35 +0800 CST
Vue3中如何处理权限控制?
2024-11-18 05:36:30 +0800 CST
一键配置本地yum源
2024-11-18 14:45:15 +0800 CST
IP地址获取函数
2024-11-19 00:03:29 +0800 CST
一些好玩且实用的开源AI工具
2024-11-19 09:31:57 +0800 CST
js生成器函数
2024-11-18 15:21:08 +0800 CST
File 和 Blob 的区别
2024-11-18 23:11:46 +0800 CST
地图标注管理系统
2024-11-19 09:14:52 +0800 CST
Flet 构建跨平台应用的 Python 框架
2025-03-21 08:40:53 +0800 CST
智能视频墙
2025-02-22 11:21:29 +0800 CST
Python 微软邮箱 OAuth2 认证 Demo
2024-11-20 15:42:09 +0800 CST
Nginx 性能优化有这篇就够了!
2024-11-19 01:57:41 +0800 CST
Linux 网站访问日志分析脚本
2024-11-18 19:58:45 +0800 CST
Vue3中哪些API被废弃了?
2024-11-17 04:17:22 +0800 CST
程序员茄子在线接单