模拟商城秒杀场景防止高并发下多下单问题
一共做了俩种解决方案:
Mysql事务解决高并发多下单问题 Redis队列解决高并发多下单问题Mysql事务思路:
使用php异常处理和mysql事务,将数据库操作的的代码都写在事务里,出现异常就到catch中做rollBack。
只有订单写入成功了 库存减1成功了才执行commit
其中那一步骤出现问题都rollBack
Redis队列思路:
其实就是写入订单信息 和减少库存信息不操作mysql,而操作redis.然后把用户抢购信息写进redis中,之后根据redis中的抢购信息,在写进数据库。
根据库存数量 push进对应数量的链表 eg://有100个库存就写将链表长度添加到100
每有一个抢购请求就从链表中pop一次
将用户的用户的下单信息写进redis中储存
最后根据redis中的下单信息一次性写进mysql中,写进一条订单信息就减相对数量的库存,在删除redis中的用户下单信息
第4步 抢购期间由计划任务每秒执行一次(每秒坚持队列中是否有新用户抢购成功,写入订单表,方便用户抢购后查询)
以上俩种都经过压力测试,数据库没出现任何问题。
测试工具webbench
版权声明:
1、该文章(资料)来源于互联网公开信息,我方只是对该内容做点评,所分享的下载地址为原作者公开地址。2、网站不提供资料下载,如需下载请到原作者页面进行下载。
3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考学习用!
4、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。