go语言

33-Beego优选订单并发问题

2019-02-18  本文已影响98人  梦想成为小仙女

上一篇文章我们讲述了如何保存订单,订单商品数据,这一篇文章我们要讲讲在保存订单数据时,如何修改商品库存和销量,如何确保多个订单同时产生时,不发生错误,如果是抢购类,同时会有多个用户同时产生订单,我们如何确保在处理这种高并发问题时不出错.

image.png
库存改变了,哈哈哈
并发问题就不在这里继续讨论了

0.事务逻辑

订单并发问题.png
订单并发问题.png

1.知识点

1.MySQL数据隔离:
百度:transaction-isolation:READ-COMMITED
https://www.cnblogs.com/zhoujinyi/p/3437475.html
MySQL有四种事务隔离方式:
默认情况下是:可重复读
我们要改成:已提交读
事务隔离要明确三个概念:
1.1脏读:在一个事务中能够读取另一个事务未提交到数据库的数据更改
1.2不可重复读:在一个事务中多次访问数据库中同一数据,如果其它食物修改了该数据,上一个事务会读取到不同的内容,反之,可重复读就是在一个事务中访问的同一数据不会发觉数据的变化
1.3幻读:一个事务对一张表中的全部数据进行修改,但是其它的事务在该表中新插入数据,第一张表发现表中还有没有修改的数据,就像产生幻觉一样
本篇文章中,MySQL默认的是可重复读模式,我们要修改称已提交读模式,确保数据不可重复,发掘其它订单事务造成的库存变化

image.png
image.png

一.修改商品库存,销量并保存初始库存

image.png

二.在插入商品订单前确保库存为初始库存

image.png

三.修改MySQL数据隔离

在my.ini中添加transaction-isolation=READ-COMMITTED

上一篇下一篇

猜你喜欢

热点阅读