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的批量远程管理和部署工具Fabric用法实例
Jan 23 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
Python使用smtplib模块发送电子邮件的流程详解
Jun 27 Python
Python安装第三方库及常见问题处理方法汇总
Sep 13 Python
Python网络编程详解
Oct 31 Python
python中树与树的表示知识点总结
Sep 14 Python
python 求10个数的平均数实例
Dec 16 Python
浅谈Python线程的同步互斥与死锁
Mar 22 Python
windows10 pycharm下安装pyltp库和加载模型实现语义角色标注的示例代码
May 07 Python
python MD5加密的示例
Oct 19 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
Apr 13 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
对盗链说再见...
2006/10/09 PHP
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
php执行多个存储过程的方法【基于thinkPHP】
2016/11/08 PHP
php正则提取html图片(img)src地址与任意属性的方法
2017/02/08 PHP
PHP最常用的正则表达式
2017/02/13 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
YII2框架中日志的配置与使用方法实例分析
2020/03/18 PHP
用javascript动态调整iframe高度的方法
2007/03/06 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jquery如何判断某元素是否具备指定的样式
2013/11/05 Javascript
javascript实现十秒钟后注册按钮可点击的方法
2015/05/13 Javascript
jquery实现横向图片轮播特效代码分享
2015/11/19 Javascript
基于canvas实现的钟摆效果完整实例
2016/01/26 Javascript
输入法的回车与消息发送快捷键回车的冲突解决方法
2016/08/09 Javascript
JS判断来路是否是百度等搜索索引进行弹窗或自动跳转的实现代码
2016/10/09 Javascript
javascript笔记之匿名函数和闭包
2017/02/06 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
jQuery简单实现MD5加密的方法
2017/03/03 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
详解JavaScript中typeof与instanceof用法
2018/10/24 Javascript
Vue实现的父组件向子组件传值功能示例
2019/01/19 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
利用numpy+matplotlib绘图的基本操作教程
2017/05/03 Python
django表单的Widgets使用详解
2019/07/22 Python
Django RBAC权限管理设计过程详解
2019/08/06 Python
解决Django中checkbox复选框的传值问题
2020/03/31 Python
Python如何把字典写入到CSV文件的方法示例
2020/08/23 Python
Python基于staticmethod装饰器标示静态方法
2020/10/17 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
物流司机岗位职责
2013/12/28 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
三严三实心得体会范文
2014/10/13 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
关于nginx 实现jira反向代理的问题
2021/09/25 Servers