- Mysql事务解决高并发多下单问题
- Redis队列解决高并发多下单问题
使用php异常处理和mysql事务,将数据库操作的的代码都写在事务里,出现异常就到catch中做rollBack。
只有订单写入成功了 库存减1成功了才执行commit
其中那一步骤出现问题都rollBack
其实就是写入订单信息 和减少库存信息不操作mysql,而操作redis.然后把用户抢购信息写进redis中,之后根据redis中的抢购信息,在写进数据库。
根据库存数量 push进对应数量的链表 eg://有100个库存就写将链表长度添加到100
每有一个抢购请求就从链表中pop一次
将用户的用户的下单信息写进redis中储存
最后根据redis中的下单信息一次性写进mysql中,写进一条订单信息就减相对数量的库存,在删除redis中的用户下单信息
第4步 抢购期间由计划任务每秒执行一次(每秒坚持队列中是否有新用户抢购成功,写入订单表,方便用户抢购后查询)
以上俩种都经过压力测试,数据库没出现任何问题。
测试工具webbench