PHP商品库存超卖并发测试实例分析
发表于:2025-11-15 作者:千家信息网编辑
千家信息网最后更新 2025年11月15日,这篇文章主要介绍"PHP商品库存超卖并发测试实例分析",在日常操作中,相信很多人在PHP商品库存超卖并发测试实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP
千家信息网最后更新 2025年11月15日PHP商品库存超卖并发测试实例分析
这篇文章主要介绍"PHP商品库存超卖并发测试实例分析",在日常操作中,相信很多人在PHP商品库存超卖并发测试实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP商品库存超卖并发测试实例分析"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、 普通下单
并发测试时 product 表 id =1 name = 稻花香大米 store = 15
请求总数30 每次10个并发
ab -n 30 -c 10 http://xxxxx.top/code/the_limit/add_order.php
结果:
有 15 次库存减少成功 store 库存出现了负数 -7 8 次判断为库存不够 (库存负数是不正确的 不允许的)
二、unsigned 模式
调整回 product 表 id =1 name = 稻花香大米 store = 15
请求总数30 每次10个并发
ab -n 30 -c 10 http://xxxxx.top/code/the_limit/unsigned.php
结果:
有 15 次库存减少成功 store 库存出现了负数 -6 9 次判断为库存不够 (库存负数是不正确的 不允许的)
仅在查询语句上 加 for update 加锁效果不大
三、mysql 的事务,锁住操作的行
调整回 product 表 id =1 name = 稻花香大米 store = 15
请求总数30 每次10个并发
ab -n 30 -c 10 http://xxxxx.top/code/the_limit/ACID.php
结果:
有 15 次库存减少成功 store 库存未出现负数 15 次判断为库存不够 (库存负数是不正确的 不允许的)
加事务 效果不错 ab -n 3000 -c 1000 并发也能扛住
四、 非阻塞的文件排他锁
阻塞形式
非阻塞形式
效果也没有出现负数 但性能上 事务 > 阻塞 > 非阻塞
五、 redis 队列
代码与之前 略有调整 乐观锁版
connect("127.0.0.1", 6379);$redis->auth('PASSWORD');$redis->watch('sales');//乐观锁 监视作用 set() 初始值0$sales = $redis->get('sales');//var_dump($sales); exit;db();global $con;// 查询商品信息//$product_id = 1;//$sql = "select * from products where id={$product_id}";//$result = mysqli_query($con, $sql);//$row = mysqli_fetch_assoc($result);//$store = $row['store'];// 库存$n = 15;if ($sales >= $n) { insertLog('库存为0 秒杀失败'); exit('秒杀结束');}//redis开启事务$redis->multi();$redis->incr('sales'); //将 key 中储存的数字值增一 ,如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。$res = $redis->exec(); //成功1 失败0if ($res) { //秒杀成功 $con = new mysqli('localhost','root','PASSWORD','dev'); if (!$con) { echo "数据库连接失败"; } $product_id = 1;// 商品ID $buy_num = 1;// 购买数量 sleep(1); $sql = "update products set store=store-{$buy_num} where id={$product_id}"; if (mysqli_query($con, $sql)) { echo "秒杀完成"; insertLog('恭喜 秒杀成功'); }} else { insertLog('抱歉 秒杀失败'); exit('抢购失败');}function db(){ global $con; $con = new mysqli('localhost','root','WOrd1234.*','dev'); if (!$con) { echo "数据库连接失败"; }}/** * 记录日志 */function insertLog($content){ global $con; $sql = "INSERT INTO `order_log` (content) values('$content')"; mysqli_query($con, $sql);}ab -n 30 -c 10 http://xxxxxx.top/code/the_limit/optimistic\ _redis_lock.php到此,关于"PHP商品库存超卖并发测试实例分析"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!
库存
负数
商品
成功
测试
阻塞
实例
实例分析
分析
事务
学习
不够
大米
总数
效果
稻花
稻花香
结果
调整
乐观
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
华为5885服务器管理口登录
软件开发的内部环境因素
网络安全法六十一条
数据库明细账表
宝山区智能网络技术创造辉煌
阿里云服务器公网ip
如何制作mc 服务器
给我播放网络安全手抄报的画
神武4手游服务器查询
网络安全宣传知识手抄报一年级
北京窝窝网络技术有限公司
建网站要买服务器吗
网络安全人才白皮书下载
数据库通讯录子系统课程系统
辉煌电脑网络技术
数据库打断设计
未来之役为什么不能连接服务器
重庆庆邦互联网科技
计算机网络安全800字
csgo官匹服务器限速吗
docker 备份服务器
深圳松下软件开发
湖北服务器硬盘销售
网络安全作业 防火墙设计
手机网络安全课件ppt
在线代理服务器 干净
湖北蓝牙软件开发厂家
gis影像数据库
IP数据网络技术
数据库的四大方向