图片类网站建设,网站的前端和后台,做网批那个网站好,wordpress 导出插件我们知道数据库处理sql是一条条处理的#xff0c;假设购买商品的流程是这样的#xff1a;sql1:查询商品库存1 if(库存数量 0)2 {3 //生成订单4 //库存-15 当没有并发时#xff0c;上面的流程看起来是如此完美#xff0c;假设同时两个人下单#xff0c;而库存只有…我们知道数据库处理sql是一条条处理的假设购买商品的流程是这样的sql1:查询商品库存1 if(库存数量 0)2 {3 //生成订单4 //库存-15 当没有并发时上面的流程看起来是如此完美假设同时两个人下单而库存只有1个了在sql1阶段两个人查询到的库存都是0的于是最终都执行了sql2库存最后变为-1超售了要么补库存要么等用户投诉吧。解决这个问题比较流行的思路1.用额外的单进程处理一个队列下单请求放到队列里一个个处理就不会有并发的问题了但是要额外的后台进程以及延迟问题不予考虑。2.数据库乐观锁大致的意思是先查询库存然后立马将库存1然后订单生成后在更新库存前再查询一次库存看看跟预期的库存数量是否保持一致不一致就回滚提示用户库存不足。3.根据update结果来判断我们可以在sql2的时候加一个判断条件update ... where 库存0如果返回false则说明库存不足并回滚事务。4.借助文件排他锁在处理下单请求的时候用flock锁定一个文件如果锁定失败说明有其他订单正在处理此时要么等待要么直接提示用户服务器繁忙本文要说的是第4种方案大致代码如下阻塞(等待)模式$fp fopen(lock.txt, w);if(flock($fp,LOCK_EX)){//..处理订单flock($fp,LOCK_UN);}fclose($fp);?非阻塞模式$fp fopen(lock.txt, w);if(flock($fp,LOCK_EX | LOCK_NB)){//..处理订单flock($fp,LOCK_UN);}else{echo 系统繁忙请稍后再试;}fclose($fp);?以上内容希望帮助到大家很多PHPer在进阶的时候总会遇到一些问题和瓶颈业务代码写多了没有方向感不知道该从那里入手去提升对此我整理了一些资料包括但不限于分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6laravelYII2RedisSwoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家或 者关注我每天分享技术文章进阶PHP架构师www.zhihu.com作者归一山人原网站博客园来源https://www.cnblogs.com/guiyishanren/p/11564256.html