django解决订单并发问题【推荐】


Posted in Python onJuly 31, 2019

并发处理

在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。

解决办法:

悲观锁

当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作,使用类似如下语法

select stock from tb_sku where id=1 for update;
SKU.objects.select_for_update().get(id=1)

悲观锁类似于我们在多线程资源竞争时添加的互斥锁,容易出现死锁现象,采用不多。

乐观锁

乐观锁并不是真实存在的锁,而是在更新的时候判断此时的库存是否是之前查询出的库存,如果相同,表示没人修改,可以更新库存,否则表示别人抢过资源,不再执行库存更新。类似如下操作

update tb_sku set stock=2 where id=1 and stock=7;
SKU.objects.filter(id=1, stock=7).update(stock=2)

任务队列

将下单的逻辑放到任务队列中(如celery),将并行转为串行,所有人排队下单。比如开启只有一个进程的Celery,一个订单一个订单的处理。

总结

以上所述是小编给大家介绍的django解决订单并发问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python实现的百度站长自动URL提交小工具
Jun 27 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
使用python为mysql实现restful接口
Jan 05 Python
python实现定时提取实时日志程序
Jun 22 Python
Selenium(Python web测试工具)基本用法详解
Aug 10 Python
浅谈python3发送post请求参数为空的情况
Dec 28 Python
python子线程退出及线程退出控制的代码
Oct 16 Python
Python解压 rar、zip、tar文件的方法
Nov 19 Python
python yield和Generator函数用法详解
Feb 10 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
May 26 Python
python安装后的目录在哪里
Jun 21 Python
关于pycharm 切换 python3.9 报错 ‘HTMLParser‘ object has no attribute ‘unescape‘ 的问题
Nov 24 Python
python opencv将图片转为灰度图的方法示例
Jul 31 #Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 #Python
Python对接六大主流数据库(只需三步)
Jul 31 #Python
Python爬虫 scrapy框架爬取某招聘网存入mongodb解析
Jul 31 #Python
python爬虫 模拟登录人人网过程解析
Jul 31 #Python
Python爬虫 bilibili视频弹幕提取过程详解
Jul 31 #Python
Django实现跨域的2种方法
Jul 31 #Python
You might like
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
2011/12/30 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
ThinkPHP连接数据库的方式汇总
2014/12/05 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
php 的多进程操作实践案例分析
2020/02/28 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
离开页面时检测表单元素是否被修改,提示保存的js代码
2010/08/25 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
查找iframe里元素的方法可传参
2013/09/11 Javascript
js中substring和substr的定义和用法
2014/05/05 Javascript
Jqprint实现页面打印
2017/01/06 Javascript
JavaScript之json_动力节点Java学院整理
2017/06/29 Javascript
让div运动起来 js实现缓动效果
2017/07/06 Javascript
jQuery实现ajax回调函数带入参数的方法示例
2018/06/26 jQuery
基于Vue 服务端Cookies删除的问题
2018/09/21 Javascript
如何基于javascript实现贪吃蛇游戏
2020/02/09 Javascript
vue脚手架项目创建步骤详解
2021/03/02 Vue.js
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python 闭包,函数分隔作用域,nonlocal声明非局部变量操作示例
2019/10/14 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
解决Jupyter NoteBook输出的图表太小看不清问题
2020/04/16 Python
python自定义函数def的应用详解
2020/06/03 Python
python pillow库的基础使用教程
2021/01/13 Python
小学中秋节活动方案
2014/02/06 职场文书
县委常委班子对照检查材料思想汇报
2014/09/28 职场文书
工人先锋号事迹材料
2014/12/24 职场文书
优秀教师个人总结
2015/02/11 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
2015年领导班子工作总结
2015/05/23 职场文书
小学班级标语口号大全
2015/12/26 职场文书
SpringBoot实现quartz定时任务可视化管理功能
2021/08/30 Java/Android
CSS link与@import的区别和用法解析
2023/05/07 HTML / CSS