zoukankan      html  css  js  c++  java
  • Django中管理并发操作

    Django中管理并发操作

    https://www.cnblogs.com/smiling-crying/p/9371341.html 

    上一篇我们说了,如何在Django中进行事务操作,数据的原子性操作

    涉及了事务操作,我们不得不考虑的另一个问题就是:并发操作

    还是那个用户转账的操作

      我们使用事务操作解决的操作中途服务器宕机问题

    但是,如果有两条请求同时修改一条记录该怎么办?

    我们可以使用select_for_update函数

    select_for_update使用的是悲观锁

    使用select_for_update内部执行的sql语句就是select...for update

    具体用法:

    models.UserInfo.objects.select_for_update().get()

    注意:一定要让select_for_update在同一个事务中

    如果做的是金融的话建议还是使用悲观锁,这个会更加安全


    关于乐观锁

    乐观锁的出发点是:同一条数据很少会因为并发修改而产生冲突,适用于读多写少的操作,用以提高吞吐量

    实现方式:

      读取一个字段,执行处理逻辑,当需要更新数据的时候,再次检查该字段是否和第一次读取的一致。如果一致,则更新数据。否则拒绝更新,重新读取后再提交

    乐观锁与悲观锁的比较

    悲观锁可能会导致死锁的发生

      当A锁定了a资源,需要b资源。而b资源又被B锁定了,正在等待a资源。此时就导致了死锁。我们一般通过设置超时时间来处理这个问题。

    悲观锁可以有效的降低冲突后,重试的次数

    乐观锁可以提高响应速度

  • 相关阅读:
    暑期测试训练3
    对于在线段树上修改整段区间的理解
    UVA 11090 判负圈问题
    ZOJ 2588 求割边问题
    POJ 1523 网络连通
    hdu 1163
    hdu 1703
    hdu 2577 模拟
    hdu 3836 强连通+缩点:加边构强连通
    hdu 2571
  • 原文地址:https://www.cnblogs.com/hanbowen/p/10065588.html
Copyright © 2011-2022 走看看