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

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

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-18 18:18:19 +0800 CST
资源文档库
2024-12-07 20:42:49 +0800 CST
2025,重新认识 HTML!
2025-02-07 14:40:00 +0800 CST
CSS实现亚克力和磨砂玻璃效果
2024-11-18 01:21:20 +0800 CST
SQL常用优化的技巧
2024-11-18 15:56:06 +0800 CST
支付宝批量转账
2024-11-18 20:26:17 +0800 CST
程序员出海搞钱工具库
2024-11-18 22:16:19 +0800 CST
一个简单的html卡片元素代码
2024-11-18 18:14:27 +0800 CST
JavaScript设计模式:桥接模式
2024-11-18 19:03:40 +0800 CST
利用图片实现网站的加载速度
2024-11-18 12:29:31 +0800 CST
JavaScript设计模式:观察者模式
2024-11-19 05:37:50 +0800 CST
Vue3中的v-for指令有什么新特性?
2024-11-18 12:34:09 +0800 CST
7种Go语言生成唯一ID的实用方法
2024-11-19 05:22:50 +0800 CST
MyLib5,一个Python中非常有用的库
2024-11-18 12:50:13 +0800 CST
Vue3中怎样处理组件引用?
2024-11-18 23:17:15 +0800 CST
动态渐变背景
2024-11-19 01:49:50 +0800 CST
程序员茄子在线接单