• Django中管理并发操作


    上一篇我们说了,如何在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资源。此时就导致了死锁。我们一般通过设置超时时间来处理这个问题。

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

    乐观锁可以提高响应速度

  • 相关阅读:
    2019总结
    数据挖掘-挖掘频繁模式、关联和相关性:基本概念和方法
    Elasticsearch-删除数据
    Elasticsearch-更新现有文档
    Elasticsearch-如何识别一篇文档
    2019-10-25 记录
    信息、数据、知识之间的关系
    螺旋式上升,螺旋形理论
    触发
    书籍阅读
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9371341.html
Copyright © 2020-2023  润新知