php结合redis实现高并发下的抢购
9页1、phpphp 结合结合 redisredis 实现高并发下的抢购、秒杀功能实现高并发下的抢购、秒杀功能抢购、秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少(“超卖“问题)对于第一个问题,已经很容易想到用缓存来处理抢购,避免直接操作数据库,例如使用 Redis。重点在于第二个问题常规写法:查询出对应商品的库存,看是否大于 0,然后执行生成订单等操作,但是在判断库存是否大于 0 处,如果在高并发下就会有问题,导致库存量出现负数? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 240)/高并发下会导致超卖 $order_sn=build_order_no(); /生成订单 $sql=“insert into ih_order(order_sn,user_id,goods_id,sku_id,price) values($order_sn,$user_id,$goods_id,$sku_id,$price)“; $order_rs=mysql_q
2、uery($sql,$conn); /库存减少 $sql=“update ih_store set number=number-$number where sku_id=$sku_id“; $store_rs=mysql_query($sql,$conn); if(mysql_affected_rows() insertLog(库存减少成功); else insertLog(库存减少失败); else insertLog(库存不够); ?优化方案优化方案 1 1:将库存字段:将库存字段 numbernumber 字段设为字段设为 unsignedunsigned,当库存为,当库存为 0 0 时,因为字段不能为时,因为字段不能为负数,将会返回负数,将会返回 falsefalse? 1 2 3 4 5 6/库存减少 $sql=“update ih_store set number=number-$number where sku_id=$sku_id and number0“; $store_rs=mysql_query($sql,$conn); if(mysql_affected_row
3、s() insertLog(库存减少成功); 优化方案优化方案 2 2:使用:使用 mysqlmysql 的事务,锁住操作的行的事务,锁住操作的行? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 410)/生成订单 $order_sn=build_order_no(); $sql=“insert into ih_order(order_sn,user_id,goods_id,sku_id,price) 42 43 44 45 46 47 48 49 50 51 52 53 54values($order_sn,$user_id,$goods_id,$sku_id,$price)“; $order_rs=mysql_query($sql,$conn); /库存减少$sql=“update ih_store set number=number-$number where sku_id=$sku_id“;$store_
4、rs=mysql_query($sql,$conn); if(mysql_affected_rows() insertLog(库存减少成功);mysql_query(“COMMIT“);/事务提交即解锁else insertLog(库存减少失败); elseinsertLog(库存不够);mysql_query(“ROLLBACK“); ?优化方案优化方案 3 3:使用非阻塞的文件排他锁:使用非阻塞的文件排他锁? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 240)/库存是否大于 0/模拟下单操作 $order_sn=build_order_no(); $sql=“insert into ih_order(order_sn,user_id,goods_id,sku_id,price) values($order_sn,$user_id,$goods_id,$sku_id,$price)“; $order_rs=mysql_query($sql,$conn); /库存减少$sql=“update ih_store
《php结合redis实现高并发下的抢购》由会员m****分享,可在线阅读,更多相关《php结合redis实现高并发下的抢购》请在金锄头文库上搜索。
DB2发生死锁情况时应该怎么处理
Python 为何能成最强编程语言
面试前必须要知道的Redis面试
MySQL下自动删除指定时间以前的记录的操作方法
深入理解FastCGI协议以及在PHP中的实现
MySQL数据库性能优化之硬件瓶颈分析
NoSQL数据库大全收集整理
2018 – 2019 年前端 JavaScript 面试题
PHP文件包含漏洞的形式总结
5种使用Python代码轻松实现数据可视化的方法
改进JavaScript和Bust的互操作性:深入认识wasm-bindgen组件
C#图片缩放平移从功能分析到编码实现
详解网络蜘蛛的安全隐患及预防方法
利用NAP解除安全隐患自动隐藏你的IP地址
解决分布式数据库和离线网络中原子性问题的新方法
bbed恢复数据遇到延迟块清除的问题
Oracle Data Redaction数据加密
linux下du和df结果不一致的原因及处理
基于QMP实现对qemu虚拟机进行交互
解读Java并发队列BlockingQueue
2023-08-28 7页
2023-08-15 11页
2020-05-10 4页
2020-05-10 4页
2020-05-10 6页
2020-05-10 5页
2020-05-10 5页
2020-05-10 3页
2020-05-10 5页
2020-05-10 4页