为了账号安全,请及时绑定邮箱和手机立即绑定

django使用F()处理竞争条件时怎么保证上限?

django使用F()处理竞争条件时怎么保证上限?

PHP
慕姐4208626 2019-03-02 10:07:35
比如有这样一个模型:class Demo(models.Model):     top = models.IntegerField()     num = models.IntegerField(default=0)先产生一条初始的记录:demo = Demo.objects.create(top=10)之后通过F()表达式对num进行更新避免竞争,但又要保证num不大与top。# 客户端1demo_obj = Demo.objects.get(pk=1)    # top: 10, num: 8demo_obj.num = F('num') + 2demo_obj.save()# 客户端2demo_obj = Demo.objects.get(pk=1)    # top: 10, num: 8demo_obj.num = F('num') + 1demo_obj.save()上面两个客户端同时操作,由于使用了F()表达式,demo_obj.num是一个表达式对象,具体的更新操作交由数据库处理了。这种情况怎么保证num在累加的时候不能超过top?
查看完整描述

2 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

可以使用悲观锁(select_for_update 的使用方式)或者乐观锁,具体的选择看你们自己的业务场景,使用悲观锁还是使用乐观锁,根据自己的业务定

查看完整回答
反对 回复 2019-03-28
  • 2 回答
  • 0 关注
  • 716 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信