乐观锁解决并发下单问题和事务隔离级别的修改

一.乐观锁结果并发下单问题

1.查询商品
查询原有库存
查询原有销量
2.以商品和原有库存作为条件,用result接收结果,result=0,表示被修改,下单失败,若不等于零表示原始库存中途未被修改,则更新库存和销量
3.如果遇到网络信号不好,那么用户只买一个但是库存100时也会下单失败
购买成功包括两点:
库存大于购买商品数
库存没有被他人修改
4.所以使用无线循环,如果库存被改动,循环下单,直到库存不足,跳出循环
5.事务隔离级别决定了是否能查到已被修改后的库存数据
所以修改事务隔离级别为Read committed读取已提交

#循环下单直到库存不足
  while True:
  	#查询商品
  	sku=SKU.object.get(id=sku_id)
  	#查询商品原始库存
  	origin_stock=sku.stock
  	origin_sales=sku.sales
  	.....其他操作
	#乐观锁更新数据库销量
	new_stock=origin_stock - sku_count
	new_sales=origin_sales + sku_count	
	result=SKU.objects.fllter(id=sku_id,sku.stock=origin_stock)
		.update(stock=new_stock,sales=new_sales)
	#如果下单失败但是库存足够,继续下单,直到下单成功
	if result==0:
		continue
	#下单成功跳出循环
	break
	

	

二.修改事务隔离级别

MySQL事务隔离级别修改
隔离级别指,在处理同一个数据的多个事务中,一个事务修改数据后,其他事务能否看到修改后结果
默认使用可重复读( Repeatable read)。
修改:

cd /etc/mysql/mysql.conf.d/
ls
sudo vim mysql.cnf
105 transaction-isolation=Read committed

Read committed:读取已提交,其他事务提交了对数据的修改后,本事务就能读取到修改后的数据值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值