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

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

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

推荐文章

解决 PHP 中的 HTTP 请求超时问题
2024-11-19 09:10:35 +0800 CST
html一个包含iPhoneX和MacBook模拟器
2024-11-19 08:03:47 +0800 CST
html夫妻约定
2024-11-19 01:24:21 +0800 CST
Go 并发利器 WaitGroup
2024-11-19 02:51:18 +0800 CST
如何在Vue3中处理全局状态管理?
2024-11-18 19:25:59 +0800 CST
全栈利器 H3 框架来了!
2025-07-07 17:48:01 +0800 CST
如何配置获取微信支付参数
2024-11-19 08:10:41 +0800 CST
Redis函数在PHP中的使用方法
2024-11-19 04:42:21 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
7种Go语言生成唯一ID的实用方法
2024-11-19 05:22:50 +0800 CST
PHP如何进行MySQL数据备份?
2024-11-18 20:40:25 +0800 CST
Requests库详细介绍
2024-11-18 05:53:37 +0800 CST
Go语言SQL操作实战
2024-11-18 19:30:51 +0800 CST
Nginx 性能优化有这篇就够了!
2024-11-19 01:57:41 +0800 CST
2025,重新认识 HTML!
2025-02-07 14:40:00 +0800 CST
乐观锁和悲观锁,如何区分?
2024-11-19 09:36:53 +0800 CST
程序员茄子在线接单