订单并发

问题:

当多人同时购买同一件商品时,有可能会产生订单并发问题。

例如:

id为16的商品库存有10件,两人同时购买这件商品,每人购买5件,产生订单并发问题之后,两个下单都成功,但是商品的库存变为5件。

订单并发解决方案:

1)悲观锁

在事务中查询数据的时候尝试对数据进行加锁(互斥锁), 获取到锁的事务可以对数据进行操作,获取不到锁的事务会阻塞,直到锁被释放。
悲观锁有死锁问题,不推荐使用

2)乐观"锁"

乐观锁本质上不是加锁,查询数据的时候不加锁,对数据进行修改的时候需要进行判断,修改失败需要重新进行尝试。

3)任务队列

将下单的代码封装成celery任务函数,在下单API中只是发出下单的任务消息,同时celery的worker工作进程进行只创建一个。

mysql事务隔离级别:

隔离级别 说明
Repeatable read 可重复读 在一个事务中执行同一个查询语句时,获取到的查询结果永远和第一次获取到结果一致,即使其他事务已经修改了对应的数据并且也进行了提交,当前事务也获取不到更新之后结果。
Read committed 读取已提交 其他事务只有修改了对应的数据并且也进行了提交,当前事务就能获取更新之后的结果。

mysql数据库的事务默认隔离级别是: Repeatable read 可重复读

修改mysql事务隔离级别

# 1. 修改mysql数据库配置文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf# 2. 添加配置项27 [mysqld]28 #29 # * Basic Settings30 #31 user        = mysql32 pid-file    = /var/run/mysqld/mysqld.pid33 socket      = /var/run/mysqld/mysqld.sock34 port        = 330635 basedir     = /usr36 datadir     = /var/lib/mysql37 tmpdir      = /tmp38 lc-messages-dir = /usr/share/mysql39 skip-external-locking40 # 将mysql事务的隔离级别设置为读取已提交41 transaction-isolation=READ-COMMITTED# 3. 重启mysql服务
sudo service mysql restart



订单并发问题分析及解决相关推荐

  1. “并发冲突” 分析与解决

    并发冲突分析与解决      我们都知道,我们计算机中的运算都是交给CPU处理的,如果对于一个单核CPU来说,在绝对的某个时刻内,CPU只能同时完成一个任务,不可能同时的处理多个任务.但是我们都知道, ...

  2. python盘点订单_django解决订单并发问题【推荐】

    并发处理 在多个用户同时发起对同一个商品的下单请求时,先查询商品库存,再修改商品库存,会出现资源竞争问题,导致库存的最终结果出现异常. 解决办法: 悲观锁 当查询某条记录时,即让数据库为该记录加锁,锁 ...

  3. 基于Django的乐观锁与悲观锁解决订单并发问题的一点浅见

    订单并发这个问题我想大家都是有一定认识的,这里我说一下我的一些浅见,我会尽可能的让大家了解如何解决这类问题. 在解释如何解决订单并发问题之前,需要先了解一下什么是数据库的事务.(我用的是mysql数据 ...

  4. <httpasyncclient>高并发场景报错分析与解决

    本文总结讲解httpasyncclient使用过程中遇到的各种异常(java.net.ConnectException.java.net.SocketTimeoutException.java.uti ...

  5. 【DailyFresh】课程记录6---订单模块(订单并发)

    P84 订单生成--MySQL事务概念 在创建中,向订单商品表中添加一条记录之前,还有一步操作,即判断商品的库存 # TODO: 判断商品的库存 分析:假如一件商品只有两件库存,你往购物车中加了两个, ...

  6. 搞懂分布式技术30:高并发解决方案——提升高并发量服务器性能解决思路

    高并发解决方案--提升高并发量服务器性能解决思路 一个小型的网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很 ...

  7. java-jvm-full gc频繁的分析及解决

    返回博客列表 转 关于施用full gc频繁的分析及解决 DEC_LIU 发布时间: 2013/10/13 20:32 阅读: 3431 收藏: 14 点赞: 1 评论: 1 关于应用full gc频 ...

  8. mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决

    本文主要向大家介绍了线上MySQL数据库机器内存爆掉原因分析与解决,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 现象: 阿里金融某业务的MySQL机器的内存每隔几天就会增长,涨 ...

  9. 数据库开发 - 事务 死锁分析与解决

    为什么80%的码农都做不了架构师?>>>    #死锁分析与解决 ##事务并发执行 ##事务持锁 MySQL数据库是以行加锁的方式,避免不同事务,对同一行数据库进行同时修改的.首先来 ...

最新文章

  1. python nonetype_python装饰器 ——@符号与“TypeError: ‘NoneType’ object is not callable” | 学步园...
  2. Microsoft Visual c++简介
  3. jQuery 基础学习笔记
  4. WampServer下如何实现多域名配置
  5. python 遍历usb设备_python程序员教你写脚本玩微信跳一跳,只要有耐心,你就是王者!...
  6. python 结尾回车_理解不了Python正则表达式?我帮你搞定
  7. python - EDA - 1 统计缺失值
  8. Android蓝牙操作笔记
  9. Word2013无法正常加载mathtype
  10. imx226_IMX226CQJ-海思网络摄像芯片
  11. python爬虫之数据提取Xpath(爬取起点中文网案例)
  12. 00、Python源码编译
  13. HtmlUnit实现人人网登陆
  14. win10 系统 Internet Connection Sharing (ICS) 服务无法关闭-问题解决
  15. 次坐标从0开始_三坐标测量机安全使用+量块校准操作规程
  16. OpenCV基本函数学习
  17. 汇编语言,and、or指令
  18. Java 线程的状态
  19. IMSI、IMEI和MEID(ESN)
  20. 【微信小程序】小程序实现轮播图效果--swiper组件(一步步教你如何实现)

热门文章

  1. Leetcode典型题解答和分析、归纳和汇总——T155(最小栈)
  2. 期货指数点(期货指数点是什么)
  3. jquery缩放手势插件_ZooMove:jQuery插件可在悬停时缩放图像
  4. Linux Centos6 下载
  5. edup无线网卡驱动安装linux,EDUP无线网卡驱动安装失败解决方法
  6. 电信黑莓手机出国漫游注意事项
  7. Appletviewer运行swing
  8. Android 实现答题器功能(通过手势实现翻页效果)...
  9. python opencv学习笔记之数米粒,并返回每一个米粒的位置面积及总个数平均面积
  10. c语言米粒数实验报告,数字图像处理实验报告米粒