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

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

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 16:56:14 +0800 CST
一个收银台的HTML
2025-01-17 16:15:32 +0800 CST
一键压缩图片代码
2024-11-19 00:41:25 +0800 CST
底部导航栏
2024-11-19 01:12:32 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
一些好玩且实用的开源AI工具
2024-11-19 09:31:57 +0800 CST
前端如何给页面添加水印
2024-11-19 07:12:56 +0800 CST
15 个 JavaScript 性能优化技巧
2024-11-19 07:52:10 +0800 CST
使用Vue 3实现无刷新数据加载
2024-11-18 17:48:20 +0800 CST
五个有趣且实用的Python实例
2024-11-19 07:32:35 +0800 CST
CSS Grid 和 Flexbox 的主要区别
2024-11-18 23:09:50 +0800 CST
CSS 实现金额数字滚动效果
2024-11-19 09:17:15 +0800 CST
Nginx rewrite 的用法
2024-11-18 22:59:02 +0800 CST
PHP 如何输出带微秒的时间
2024-11-18 01:58:41 +0800 CST
js函数常见的写法以及调用方法
2024-11-19 08:55:17 +0800 CST
MySQL用命令行复制表的方法
2024-11-17 05:03:46 +0800 CST
Golang Select 的使用及基本实现
2024-11-18 13:48:21 +0800 CST
mysql时间对比
2024-11-18 14:35:19 +0800 CST
使用 `nohup` 命令的概述及案例
2024-11-18 08:18:36 +0800 CST
使用Vue 3和Axios进行API数据交互
2024-11-18 22:31:21 +0800 CST
程序员茄子在线接单