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

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

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中的v-for指令有什么新特性?
2024-11-18 12:34:09 +0800 CST
html折叠登陆表单
2024-11-18 19:51:14 +0800 CST
使用xshell上传和下载文件
2024-11-18 12:55:11 +0800 CST
微信小程序热更新
2024-11-18 15:08:49 +0800 CST
Golang 中应该知道的 defer 知识
2024-11-18 13:18:56 +0800 CST
在JavaScript中实现队列
2024-11-19 01:38:36 +0800 CST
【SQL注入】关于GORM的SQL注入问题
2024-11-19 06:54:57 +0800 CST
前端如何一次性渲染十万条数据?
2024-11-19 05:08:27 +0800 CST
在 Rust 中使用 OpenCV 进行绘图
2024-11-19 06:58:07 +0800 CST
js常用通用函数
2024-11-17 05:57:52 +0800 CST
Python上下文管理器:with语句
2024-11-19 06:25:31 +0800 CST
Gin 框架的中间件 代码压缩
2024-11-19 08:23:48 +0800 CST
Elasticsearch 文档操作
2024-11-18 12:36:01 +0800 CST
Go语言中实现RSA加密与解密
2024-11-18 01:49:30 +0800 CST
程序员茄子在线接单