并发过高导致库存买超情况
2016-01-14 14:42
162 查看
生产环境中遇到并发过高,导致库存买超的情况。
可以通过以下几种情况解决:
1.使用数据库锁机制防止并发
方法1 select for update;
update set stock = stock - x;
insert into order_list(order_id) values (1);
方法2 return = update set stock = stock -x where category_id = 1 and stock - x > 0;
if !return exit;
2.使用zk等分布式锁
3.借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙"
阻塞(等待)模式
非阻塞模式
4.使用排队等待机制顺序处理
5.使用redis等单线程处理机制
如果依然扛不住流量怎么办
1.拆分锁的粒度
2.降级需求,分散用户活跃时间
如果用户一直未支付,放到未支付的队列里面,把相应的库存补回来
可以通过以下几种情况解决:
1.使用数据库锁机制防止并发
方法1 select for update;
update set stock = stock - x;
insert into order_list(order_id) values (1);
方法2 return = update set stock = stock -x where category_id = 1 and stock - x > 0;
if !return exit;
2.使用zk等分布式锁
3.借助文件排他锁,在处理下单请求的时候,用flock锁定一个文件,如果锁定失败说明有其他订单正在处理,此时要么等待要么直接提示用户"服务器繁忙"
阻塞(等待)模式
5.使用redis等单线程处理机制
如果依然扛不住流量怎么办
1.拆分锁的粒度
2.降级需求,分散用户活跃时间
如果用户一直未支付,放到未支付的队列里面,把相应的库存补回来
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- 分布式版本管理git入门指南使用资料汇总及文章推荐
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle数据库执行脚本常用命令小结
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马