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

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

乐观锁可以提高响应速度

Django中管理并发操作的更多相关文章

  1. 如何在Django模型中管理并发性 orm select_for_update

    如何在Django模型中管理并发性 为单用户服务的桌面系统的日子已经过去了 - 网络应用程序现在正在为数百万用户提供服务,许多用户出现了广泛的新问题 - 并发问题. 在本文中,我将介绍在Django模 ...

  2. 如何在 Django 中保证并发的数据一致性

    1. 关于锁 1.1 乐观锁 乐观锁的出发点是,同一条数据很少会因为并发修改而产生冲突,适用于读多写少的场景,用以提高吞吐量. 实现方式,读取一个字段,执行处理逻辑,当需要更新数据时,再次检查该字段是 ...

  3. Django中的模型(操作数据库)

    目录 Django配置连接数据库 在Django中操作数据库 原生SQL语句操作数据库 ORM模型操作数据库 增删改查 后台管理 使用后台管理数据库 模型是数据唯一而且准确的信息来源.它包含您正在储存 ...

  4. 关于Django中的数据库操作API之distinct去重的一个误传

    转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml django提供的数据库操作API中的distinct()函数 ...

  5. Django中Model进阶操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  6. Django中的分页操作、form校验工具

    批量插入数据 后端: def fenye(request): book_list=[] for i in range(100): book_list.append(models.Book(title= ...

  7. .NET中的并发操作集合

    更新记录 本文迁移自Panda666原博客,原发布时间:2021年7月1日. 一.并发集合 .NET中提供了相当多线程安全的集合,它们都在System.Collections.Concurrent命名 ...

  8. Django 中使用 js 操作 cookies

    session与cookie对比 Cookie: 保存在用户浏览器端的键值对 本地可以修改:如果有敏感信息,可以被看到 Session: 保存在服务器端的键值对 服务端:保存键值对{'随机字符串':{ ...

  9. Django中查询相关操作

    查询集特性 1)惰性查询:只有在实际使用查询集中的数据的时候才会发生对数据库的真正查询. 2)缓存:当使用的是同一个查询集时,第一次使用的时候会发生实际数据库的查询,然后把结果缓存起来,之后再使用这个 ...

随机推荐

  1. MFC中的一般经验之谈4

    MFC中的窗口控件,都是从CWnd类中继承的.MFC以及ResourceEditor支持的所有控件称为标准控件. 在对话框资源文件夹下,然后邮件新建添加新对话框,新建对话框后要在资源视图中的对话框文件 ...

  2. [ThinkPHP] 比较标签 neq&nheq 与 PHP 中的 != 与 !== 出现的问题

    1. 模板 > 内置标签 > 比较标签 控制器: $_data['list'] = [ 'dingo' , 'engo' , 'fengo' , 'gingo' , 'autoFill'= ...

  3. Oracle EBS FND User Info API

    1. 与用户信息相关API PKG. --和用户处理有关的API FND_USER_PKG;     --和用户密码处理有关的API FND_WEB_SEC;     --和用户职责处理有关的API ...

  4. 20145233《网络对抗》Exp9 Web安全基础实践

    20145233<网络对抗>Exp9 Web安全基础实践 实验问题思考 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符 ...

  5. Git Note - git tag

    git tag is used to create labels, usually for version numbers. Format: git tag <TagName> <r ...

  6. centos 安装vmware 9.02 报 Failed to load module "pk-gtk-module" "canberra-gtk-module"

    http://www.linuxidc.com/Linux/2012-01/50944.htm 系统平台:RHEL6.1 X86 32bit 软件版本:VMware-Workstation-Full- ...

  7. 记开发个人图书收藏清单小程序开发(九)Web开发——新增图书信息

    书房信息初始化已完成,现在开始处理图书信息新增功能. 主要是实现之前New Razor Pages的后台部分. 新增需要保存的Model:Book.InitSpec.cs /Models/Book.I ...

  8. textarea 高度自动

    <textarea id="suggest" type="text" name="suggest" class="form- ...

  9. django系列6--Ajax05 请求头ContentType, 使用Ajax上传文件

    一.请求头ContentType ContentType指的是请求体的编码类型,常见的类型共有三种: 1.application/x-www-form-urlencoded 这应该是最常见的 POST ...

  10. SpringMVC框架 SpringMVC的获取01

    ---恢复内容开始--- SpringMVC通过实现MVC模式,很好地将数据.业务与展现进行了分离.从MVC的角度来说,SpringMVC和Struts2非常类似,但SpringMVC采用了可插拔的组 ...