python 中小量高并发问题的解决


描述:在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常。

例如:id为16的商品的库存为10,两人同时购买,每人买5件,如果产生并发问题,两人下单都成功,但是库存变成了5

解决办法:

  • 悲观锁:
    当查询某条记录时,即让数据库为该记录加锁,锁住记录后别人无法操作,使用类似如下语法
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,一个订单一个订单的处理。


先写这么多吧……代码块过段时间再贴

python 中如何解决高并发问题相关推荐

  1. PHP中如何解决高并发

    PHP中如何解决高并发 1:硬件方面 普通的一个p4的服务器每天最多能支持大约10万左右的IP,如果访问量超过10W那么需要专用的服务器才能解决,如果硬件不给力 软件怎么优化都是于事无补的.主要影响服 ...

  2. python如何解决高并发_Flask 处理高并发、多线程

    前言: 使用flask做服务时,可以使用python run.py的方式运行,但是这样不能用于生产环境,可能会出现连接无响应的情况.后来通过查找资料,发现flask服务处理多线程.高并发的一下方法,主 ...

  3. python解决高并发的方法

    python解决高并发的方法 参考文章: (1)python解决高并发的方法 (2)https://www.cnblogs.com/zjb19950716/p/9714307.html 备忘一下.

  4. 面试题:JavaEE项目中,你准备如何解决高并发问题?比如1000万人同时登录。作者——DengJun

    面试中遇到了这样的问题,JavaEE项目中,你准备如何解决高并发问题?比如1000万人同时登录. 1 .从最基础的地方做起,优化我们写的代码,减少必要的资源浪费.    a.避免频繁的使用new对象, ...

  5. springboot中使用Redis解决高并发的方法

    一.集成redis 1.引入redis的依赖 <dependency><groupId>org.springframework.boot</groupId>< ...

  6. 万字干货 | Python后台开发的高并发场景优化解决方案

    嘉宾 | 黄思涵 来源 | AI科技大本营在线公开课 互联网发展到今天,规模变得越来越大,也对所有的后端服务提出了更高的要求.在平时的工作中,我们或多或少都遇到过服务器压力过大问题.针对该问题,本次公 ...

  7. 干货 | Python后台开发的高并发场景优化解决方案

    嘉宾 | 黄思涵 来源 | AI科技大本营在线公开课 互联网发展到今天,规模变得越来越大,也对所有的后端服务提出了更高的要求.在平时的工作中,我们或多或少都遇到过服务器压力过大问题.针对该问题,本次公 ...

  8. 乐观锁 -业务判断 解决高并发问题

    在解决高并发问题时,如果是分布式系统显然我们只能够使用数据库端加锁机制来解决这个问题,但是这种同步机制或者数据库物理锁机制会牺牲一部分的性能,所以常常以另外一种方式来解决这个问题 就是乐观锁模式 银行 ...

  9. 每一个程序员都应该知道的高并发处理技巧、创业公司如何解决高并发问题、互联网高并发问题解决思路、caoz大神多年经验总结分享...

    本文来源于caoz梦呓公众号高并发专辑,以图形化.松耦合的方式,对互联网高并发问题做了详细解读与分析,"技术在短期内被高估,而在长期中又被低估",而不同的场景和人员成本又导致了巨头 ...

最新文章

  1. 企业管理,难的是什么?
  2. Python之字符串格式化(format)
  3. centos7安装mysql8.0简书_CentOS7安装MySQL8.0图文教程
  4. linux网络_防火墙-iptables基础
  5. win7下安装pip——Python的包管理工具
  6. Error: .eslintrc.js » eslint-config-standard: Environment key “es2021“ is unknown 版本兼容问题
  7. Unreal Engine 4 中的 UI 优化技巧
  8. WCDMA为什么上行是干扰受限,下行是功率受限
  9. 实验一:常用网络命令操作
  10. 校验码——CRC循环冗余校验码,码距,例题
  11. 风险分析(Barra风险模型)
  12. 《1024伐木累》-小白篇之丽姐(前篇)-总章节四
  13. [WinError 193] %1 不是有效的 Win32 应用程序问题解决
  14. 详述数据中心内部通风的几种形态
  15. HTPC改装19寸2U轻量级机架PC
  16. win10高危服务_您可以安全地禁用哪些Win10服务?
  17. 用户未登录跳转至登录页面
  18. PCB应力应变测试分析结合IPC-9702和IPC-9704A标准
  19. 百微秒时延,腾讯云云硬盘CBS架构深度解密
  20. python 获取年和月和日

热门文章

  1. ifeq makefile 或语句_makefile中的“ifeq”条件语法
  2. git主要命令 及与svn的对比
  3. 安卓逆向之APP抓包
  4. 2016年天猫手机双11玩法曝光
  5. java cooki的使用
  6. NameNode 和 SecondaryNameNode: Fsimage 和 Edits 解析、ovi命令、oev命令
  7. javascript 数据保留位数(整数保留整数,n位小数保留n位小数)
  8. mysql sys_config表_mysql5.7中的sys表详解(转)
  9. excel抓取数据_抓取具有要求的excel在线只读文件
  10. WebSocket + SpingBoot实现扫码登录