Django学习笔记(五十):处理并发问题,悲观锁,乐观锁

 处理并发问题时,常见的方式就是悲观锁和乐观锁

悲观锁的处理方法可以理解为在一个进程中执行数据操作的时候进行加锁操作,并只有事务结束时,锁才能释放,另一个进程才能执行才能执行这个相同的数据操作。

django中使用orm实现悲观锁的添加通过select_for_update()方法

# select * from df_goods_sku where id=sku_id for update;
sku = GoodsSKU.objects.select_for_update().get(id=sku_id)

乐观锁的处理方式可以理解为在进行数据操作时不加锁,在进行数据更新时进行判断,判断更新时的数据和之前的数据是否一致,如果不一致说明已被其他进程先进行操作

django中使用orm实现悲观锁的添加通过update方法,以之前的数据作为更新的查询条件,如果不满足则返回0,考虑到其他进程并发提交订单时之前的查询数据可能已经被更新掉(例如商品库存为5件,A购买了1件,B购物了一件,两人在执行查询之前数据是库存都为5件,当A购买成功后,库存为4件,但B在执行更新时的查询条件还是5件,这就回导致查询库存明明够但还是无法实现更新,因为查询条件(之前的查询数据)发生了改变,所以需要当一次查询更新失败后需要进行循环重新查询库存)

<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值