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使用win32com库播放mp3文件的方法
May 30 Python
Python根据区号生成手机号码的方法
Jul 08 Python
详解Python发送邮件实例
Jan 10 Python
Django admin美化插件suit使用示例
Dec 12 Python
python的scikit-learn将特征转成one-hot特征的方法
Jul 10 Python
Python中修改字符串的四种方法
Nov 02 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
更新pip3与pyttsx3文字语音转换的实现方法
Aug 08 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
使用Python内置模块与函数进行不同进制的数的转换
Apr 26 Python
python3代码中实现加法重载的实例
Dec 03 Python
常用的Python代码调试工具总结
Jun 23 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概述.
2006/10/09 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
Linux下PHP安装mcrypt扩展模块笔记
2014/09/10 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
js格式化金额可选是否带千分位以及保留精度
2014/01/28 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
2016/05/17 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
vue给对象动态添加属性和值的实例
2019/09/09 Javascript
Vue组件模板的几种书写形式(3种)
2020/02/19 Javascript
关于angular引入ng-zorro的问题浅析
2020/09/09 Javascript
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
Python时间获取及转换知识汇总
2017/01/11 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
利用Python将数值型特征进行离散化操作的方法
2018/11/06 Python
对pytorch中的梯度更新方法详解
2019/08/20 Python
Python imread、newaxis用法详解
2019/11/04 Python
Django实现后台上传并显示图片功能
2020/05/29 Python
python如何用matplotlib创建三维图表
2021/01/26 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
MAC Cosmetics巴西官方网站:M·A·C彩妆
2019/04/18 全球购物
面向对象编程是如何提高软件开发水平的
2014/05/06 面试题
客户经理岗位职责
2013/12/08 职场文书
廉洁自律承诺书
2014/03/27 职场文书
2015年中学校长工作总结
2015/05/19 职场文书
2015年高中生国庆节演讲稿
2015/07/30 职场文书
美容院管理规章制度
2015/08/05 职场文书
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL
Python 键盘事件详解
2021/11/11 Python
HTML基本元素标签介绍
2022/02/28 HTML / CSS
Win11怎么把合并的任务栏分开 Win11任务栏合并分开教程
2022/04/06 数码科技