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和Ruby中each循环引用变量问题(一个隐秘BUG?)
Jun 04 Python
详解Python中的装饰器、闭包和functools的教程
Apr 02 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
python中使用zip函数出现错误的原因
Sep 28 Python
详解Python logging调用Logger.info方法的处理过程
Feb 12 Python
python用match()函数爬数据方法详解
Jul 23 Python
django admin 自定义替换change页面模板的方法
Aug 23 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Python 读取xml数据,cv2裁剪图片实例
Mar 10 Python
Python类super()及私有属性原理解析
Jun 15 Python
Pygame Time时间控制的具体使用详解
Nov 17 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
php echo()和print()、require()和include()函数区别说明
2010/03/27 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
JavaScript 应用类库代码
2008/06/02 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
select多选 multiple的使用示例
2014/06/16 Javascript
使用Chrome调试JavaScript的断点设置和调试技巧
2014/12/16 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
Webpack中css-loader和less-loader的使用教程
2017/04/27 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
详解基于Node.js的微信JS-SDK后端接口实现代码
2017/07/15 Javascript
温故知新——JavaScript中的字符串连接问题最全总结(推荐)
2017/08/21 Javascript
node.js利用mongoose获取mongodb数据的格式化问题详解
2017/10/06 Javascript
vue中使用[provide/inject]实现页面reload的方法
2019/09/30 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
详解Python中的Descriptor描述符类
2016/06/14 Python
python字典DICT类型合并详解
2017/08/17 Python
全面分析Python的优点和缺点
2018/02/07 Python
pandas object格式转float64格式的方法
2018/04/10 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python实现感知器算法(批处理)
2019/01/18 Python
python批量下载抖音视频
2019/06/17 Python
python飞机大战pygame碰撞检测实现方法分析
2019/12/17 Python
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
俄罗斯花园种植材料批发和零售网上商店:Беккер
2019/07/22 全球购物
php优化查询foreach代码实例讲解
2021/03/24 PHP
成龙洗发水广告词
2014/03/14 职场文书
2015年煤矿工作总结
2015/04/28 职场文书
国际贸易实训总结
2015/08/03 职场文书
Matlab如何实现矩阵复制扩充
2021/06/02 Python
Redis性能监控的实现
2021/07/09 Redis
微信小程序中wxs文件的一些妙用分享
2022/02/18 Javascript
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技