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 装饰器使用详解
Jul 29 Python
Python 操作文件的基本方法总结
Aug 10 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
Feb 01 Python
Python实现通过继承覆盖方法示例
Jul 02 Python
Python实现字典排序、按照list中字典的某个key排序的方法示例
Dec 18 Python
Python之使用adb shell命令启动应用的方法详解
Jan 07 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python实现把类当做字典来访问
Dec 16 Python
解决python-docx打包之后找不到default.docx的问题
Feb 13 Python
python写文件时覆盖原来的实例方法
Jul 22 Python
用python对excel查重
Dec 07 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 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中调用其他系统http接口的方法说明
2014/02/28 PHP
smarty中常用方法实例总结
2015/08/07 PHP
PHP利用Mysql锁解决高并发的方法
2018/09/04 PHP
php使用redis的有序集合zset实现延迟队列应用示例
2020/02/20 PHP
[IE&FireFox兼容]JS对select操作
2007/01/07 Javascript
基于jquery实现的服务器验证控件的启用和禁用代码
2010/04/27 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
纯JavaScript实现获取onclick、onchange等事件的值
2014/12/29 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
node.js事件轮询机制原理知识点
2019/12/22 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
[11:33]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第二场
2018/04/06 DOTA
详解Python多线程Selenium跨浏览器测试
2017/04/01 Python
Python生成器定义与简单用法实例分析
2018/04/30 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
简单了解python shutil模块原理及使用方法
2020/04/28 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
英国Radley包德国官网:Radley London德国
2019/11/18 全球购物
俄罗斯极限运动网上商店:Board Shop №1
2020/12/18 全球购物
物业品质提升方案
2014/06/08 职场文书
门面房租房协议书
2014/08/20 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
2015年乡镇安全生产工作总结
2015/05/19 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
交通事故责任认定书
2015/08/06 职场文书
学校2016年全国助残日活动总结
2016/04/01 职场文书
2019年圣诞节祝福语集锦
2019/12/25 职场文书
超外差式晶体管收音机的组装与统调
2021/04/22 无线电
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers