千家信息网

PHP商品库存超卖并发测试实例分析

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍"PHP商品库存超卖并发测试实例分析",在日常操作中,相信很多人在PHP商品库存超卖并发测试实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"PHP
千家信息网最后更新 2026年11月02日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安全错误 数据库的锁怎样保障安全 耶加雪菲 保险科技 互联网保险 互联网新科技 西安纸贵互联网科技有限公司 中国互联网科技工作委员会毛军 互联网最新的科技 互联网中国科技 互联网金融 科技金融 互联网科技的未来发展 互联网科技博客 互联网金融监管科技 新华互联网科技校企合作 滨湖区互联网智能科技产品供应 须眉科技是互联网公司吗 河南猎农互联网科技有限公司 开一家科技互联网公司需要多少钱 深圳市罗太互联网科技有限公司 萌小萌互联网科技河南有限公司 长沙渺峰互联网科技有限公司 小牛互联网科技有限公司地址 花魁咖啡 互联网佳科技有限公司 互联网和科技技术 科技互联网的估值 南山科技园互联网公司有哪些 湖南诚度互联网科技有限公司 互联网媒体平台算高科技产业 开一家科技互联网公司需要多少钱 佛山市拉法互联网科技有限公司 电子商务与互联网科技的关系
0