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

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

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

推荐文章

Nginx 负载均衡
2024-11-19 10:03:14 +0800 CST
Nginx 实操指南:从入门到精通
2024-11-19 04:16:19 +0800 CST
js一键生成随机颜色:randomColor
2024-11-18 10:13:44 +0800 CST
实用MySQL函数
2024-11-19 03:00:12 +0800 CST
使用Python提取图片中的GPS信息
2024-11-18 13:46:22 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
PHP 微信红包算法
2024-11-17 22:45:34 +0800 CST
Requests库详细介绍
2024-11-18 05:53:37 +0800 CST
随机分数html
2025-01-25 10:56:34 +0800 CST
15 个你应该了解的有用 CSS 属性
2024-11-18 15:24:50 +0800 CST
10个几乎无人使用的罕见HTML标签
2024-11-18 21:44:46 +0800 CST
JavaScript 上传文件的几种方式
2024-11-18 21:11:59 +0800 CST
Vue中的样式绑定是如何实现的?
2024-11-18 10:52:14 +0800 CST
总结出30个代码前端代码规范
2024-11-19 07:59:43 +0800 CST
Node.js中接入微信支付
2024-11-19 06:28:31 +0800 CST
一些高质量的Mac软件资源网站
2024-11-19 08:16:01 +0800 CST
Vue3中如何处理状态管理?
2024-11-17 07:13:45 +0800 CST
Vue3 组件间通信的多种方式
2024-11-19 02:57:47 +0800 CST
HTML和CSS创建的弹性菜单
2024-11-19 10:09:04 +0800 CST
使用Rust进行跨平台GUI开发
2024-11-18 20:51:20 +0800 CST
程序员茄子在线接单