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实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
ubuntu安装sublime3并配置python3环境的方法
Mar 15 Python
一百行python代码将图片转成字符画
Feb 19 Python
Python3.5以上版本lxml导入etree报错的解决方案
Jun 26 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Python使用Pandas库实现MySQL数据库的读写
Jul 06 Python
python 实现多维数组(array)排序
Feb 28 Python
windows下Pycharm安装opencv的多种方法
Mar 05 Python
使用opencv识别图像红色区域,并输出红色区域中心点坐标
Jun 02 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
Python基于locals返回作用域字典
Oct 17 Python
使用django自带的user做外键的方法
Nov 30 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文件夹的创建与删除方法
2015/01/24 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
lnmp安装多版本PHP共存的方法详解
2018/08/02 PHP
fromCharCode和charCodeAt 方法
2006/12/27 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
js传参数受特殊字符影响错误的解决方法
2013/10/21 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
JavaScript生成福利彩票双色球号码
2015/05/15 Javascript
nodejs 子进程正确的打开方式
2017/07/03 NodeJs
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
详解使用vuex进行菜单管理
2017/12/21 Javascript
详解vue-cli项目中的proxyTable跨域问题小结
2018/02/09 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
vue封装一个简单的div框选时间的组件的方法
2019/01/06 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
浅谈对于“不用setInterval,用setTimeout”的理解
2019/08/28 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
python计算一个序列的平均值的方法
2015/07/11 Python
Python aiohttp百万并发极限测试实例分析
2019/10/26 Python
wxPython色环电阻计算器
2019/11/18 Python
Python 面向对象之封装、继承、多态操作实例分析
2019/11/21 Python
双向RNN:bidirectional_dynamic_rnn()函数的使用详解
2020/01/20 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
HTML5在线预览PDF的示例代码
2017/09/14 HTML / CSS
CAT鞋英国官网:坚固耐用的靴子和鞋
2016/10/21 全球购物
美国50岁以上单身人士约会平台:SilverSingles
2018/06/29 全球购物
公司营业员的工作总结自我评价
2013/10/05 职场文书
优秀毕业生的求职信
2014/07/21 职场文书
公司回复函格式
2015/07/14 职场文书
2016八一建军节慰问信
2015/11/30 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python
SpringCloud Feign请求头删除修改的操作代码
2022/03/20 Java/Android