PHP 高并发秒杀解决方案

本文提供 PHP 高并发秒杀解决方案(附加三个案例说明(普通流程,使用文件锁,使用redis消息队列))
 
1:(正常流程,不做任何高并发处理),代码如下:

<?php$_mysqli = new mysqli('localhost','root','','secondkill');if (mysqli_connect_errno()) {echo mysqli_connect_error();exit();
}
$_mysqli->set_charset('utf8');$_sql = "select stock from goods where id=1";$_result = $_mysqli->query($_sql);$_assoc = $_result->fetch_assoc();if($_assoc['stock']>0){$_sql = "UPDATE goods SET stock=stock-1 WHERE id=1";$_mysqli->query($_sql);}$_mysqli->close();?>

2:(使用文件锁),代码如下:

<?php$_mysqli = new mysqli('localhost','root','','secondkill');if (mysqli_connect_errno()) {echo mysqli_connect_error();exit();
}
$_mysqli->set_charset('utf8');$_sql = "select stock from goods where id=2";$_result = $_mysqli->query($_sql);$_assoc = $_result->fetch_assoc();$fp = fopen("lock.txt", "w+");
if(!flock($fp,LOCK_EX | LOCK_NB)){echo "系统繁忙,请稍后再试";return;
}if($_assoc['stock']>0){$_sql = "UPDATE goods SET stock=stock-1 WHERE id=2";if($_mysqli->query($_sql)){flock($fp,LOCK_UN);//释放锁}}fclose($fp);
$_mysqli->close();?>

3:使用redis 消息队列,代码如下:

<?php$redis=new Redis();
$result=$redis->connect('127.0.0.1',6379);$_mysqli = new mysqli('localhost','root','','secondkill');if (mysqli_connect_errno()) {echo mysqli_connect_error();exit();
}
$_mysqli->set_charset('utf8');/*
for($i=1;$i<=100;$i++){$redis->lpush('goods_nums',$i);  //秒杀开始前,先将库存数量存在队列,配合定时任务,暂定库存为100
}echo $redis->llen('goods_nums');
exit();
*/$check = $redis->lpop('goods_nums');//echo $check;if($check){echo "秒杀成功";$_sql = "UPDATE goods SET stock=stock-1 WHERE id=3";$_mysqli->query($_sql);return;
} else {echo "秒杀失败";
}?>

PHP 高并发秒杀解决方案相关推荐

  1. mysql高并发秒杀_高并发秒杀解决方案(转载)

    今天王总又给我们上了一课,其实mysql处理高并发,防止库存超卖的问题,在去年的时候,王总已经提过:但是很可惜,即使当时大家都听懂了,但是在现实开发中,还是没这方面的意识.今天就我的一些理解,整理一下 ...

  2. Java多线程、高并发秒杀时MySQL出现死锁原因(Deadlock found when trying to get lock)及对应解决方案

    1. 死锁背景 1.1 在做高并发秒杀中创建订单.减库存步骤时出现异常:MySQLTransactionRollbackException: Deadlock found when trying to ...

  3. SpringBoot实现Java高并发秒杀系统之DAO层开发(一)

    SpringBoot实现Java高并发秒杀系统之DAO层开发(一) 秒杀系统在如今电商项目中是很常见的,最近在学习电商项目时讲到了秒杀系统的实现,于是打算使用SpringBoot框架学习一下秒杀系统( ...

  4. 高并发架构解决方案总结

    高并发架构解决方案总结 一.关于高并发 高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发.又如贴吧的爆吧,就是恶意的高并发请求,也就是DDOS攻击. ...

  5. SpringBoot实现Java高并发秒杀系统之Service层开发(二)

    继上一篇文章:SpringBoot实现Java高并发秒杀系统之DAO层开发 我们创建了SpringBoot项目并熟悉了秒杀系统的表设计,下面我们将讲解一下秒杀系统的核心部分:Service业务层的开发 ...

  6. Java高并发秒杀系统【观后总结】

    项目简介 在慕课网上发现了一个JavaWeb项目,内容讲的是高并发秒杀,觉得挺有意思的,就进去学习了一番. 记录在该项目 我结合其资料和观看视频的时候整理出从该项目学到了什么... 项目Dao层 日志 ...

  7. Spring Boot+Vue/前后端分离/高并发/秒杀实战课程之spring Security快速搭建oauth2 内存版身份认证

    Springboot快速搭建oauth2 内存版身份认证 环境准备 点击[Create New Project]创建一个新的项目 项目环境配置 配置Thymeleaf 搭建oauth2认证,加入两个依 ...

  8. 高并发秒杀系统方案的优化

    最近接触了一个关于高并发秒杀的项目,在这里稍微整理一下关于这个项目的一些值得记录的一些点,以下是源码地址:github 高并发项目的瓶颈主要在于数据库访问次数上,访问次数越多,对数据库压力也就越大,因 ...

  9. Java高并发秒杀API(四)之高并发优化

    Java高并发秒杀API(四)之高并发优化 1. 高并发优化分析 关于并发 并发性上不去是因为当多个线程同时访问一行数据时,产生了事务,因此产生写锁,每当一个获取了事务的线程把锁释放,另一个排队线程才 ...

  10. 实战:基于 RocketMQ 的电商高并发秒杀场景

    内容简介: "秒杀"这一业务场景在如今已经不是什么新鲜名词,它本质上属于短时突发性高并发访问问题,业务特点如下: 定时触发,流量在瞬间突增: 秒杀请求中常常只有部分能够成功: 秒杀 ...

最新文章

  1. MySQL 的“root”用户修改密码
  2. css布局中的百分比布局
  3. mysql split 按 分割_mysql分割字符串split
  4. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 23丨学生们参加各科测试的次数【难度简单】​
  5. Python基础教程,流程控制语句详解
  6. c语言程序设计 高等教育,[高等教育]c语言程序设计.doc
  7. 个人名义申请的支付接口。支付聚合网站汇总
  8. 第14章5节: HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态 2
  9. ajax_post运用
  10. API章节--第四节包装类总结
  11. 2019web前端开发视频教程资料(汇总整理)
  12. java 网站计数器_网站计数器——Java实现
  13. 博士申请 | 美国明尼苏达大学葛畅教授招收隐私数据管理方向全奖博士/硕士/博后/访问学者...
  14. 支付宝PM告诉你,互联网产品经理的工作职责有哪些?
  15. jQuery validate 添加表单验证方法
  16. 暴走英雄坛服务器维护到什么时候,各位侠士久等了,暴走英雄坛1.8.1新版本更新前瞻一览。我们...
  17. 2018最新4K Ultra HD/UHD视频剪辑/特效合成/调色图形工作站硬件配置
  18. 20230220学习总结02
  19. css如何实现字体为10px
  20. 如何才能实现自己的梦想

热门文章

  1. Wireshark软件的使用教程
  2. JAVA计算机毕业设计宠物店管理系统Mybatis+源码+数据库+lw文档+系统+调试部署
  3. c++用化简命题逻辑公式的方法设计一个5人表决开关电路,要求3人以上(含3人)同意则表决通过
  4. C# IMEI15位转换成8位密码
  5. oracle服务怎么手动删除,彻底删除oracle服务
  6. Executors Java编程规范插件提示手动创建线程池的解决办法
  7. Javashop B2B2C 系统之社区团购商城
  8. java服装销售系统课程设计_毕业论文(设计)基于javaweb的服装销售管理系统的设计与实现.doc...
  9. “蓝桥+实验楼”:全新的平台、更优的服务
  10. tkinter教程_Tkinter教程–第3部分