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

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

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

推荐文章

Vue3中如何进行错误处理?
2024-11-18 05:17:47 +0800 CST
go发送邮件代码
2024-11-18 18:30:31 +0800 CST
Vue3 中提供了哪些新的指令
2024-11-19 01:48:20 +0800 CST
Go 1.23 中的新包:unique
2024-11-18 12:32:57 +0800 CST
php腾讯云发送短信
2024-11-18 13:50:11 +0800 CST
禁止调试前端页面代码
2024-11-19 02:17:33 +0800 CST
Go 如何做好缓存
2024-11-18 13:33:37 +0800 CST
如何实现虚拟滚动
2024-11-18 20:50:47 +0800 CST
使用Python实现邮件自动化
2024-11-18 20:18:14 +0800 CST
Go 接口:从入门到精通
2024-11-18 07:10:00 +0800 CST
Vue3中如何进行性能优化?
2024-11-17 22:52:59 +0800 CST
实用MySQL函数
2024-11-19 03:00:12 +0800 CST
404错误页面的HTML代码
2024-11-19 06:55:51 +0800 CST
10个极其有用的前端库
2024-11-19 09:41:20 +0800 CST
php指定版本安装php扩展
2024-11-19 04:10:55 +0800 CST
前端开发中常用的设计模式
2024-11-19 07:38:07 +0800 CST
Python上下文管理器:with语句
2024-11-19 06:25:31 +0800 CST
Gin 框架的中间件 代码压缩
2024-11-19 08:23:48 +0800 CST
windows安装sphinx3.0.3(中文检索)
2024-11-17 05:23:31 +0800 CST
Go 单元测试
2024-11-18 19:21:56 +0800 CST
内网穿透技术详解与工具对比
2025-04-01 22:12:02 +0800 CST
Vue3中如何实现状态管理?
2024-11-19 09:40:30 +0800 CST
浏览器自动播放策略
2024-11-19 08:54:41 +0800 CST
程序员茄子在线接单