MySQL高并发下的解决方案
来源:互联网 发布:网络客服的职责有哪些 编辑:程序博客网 时间:2024/05/21 05:57
大家可能都有这样一种感觉,Web程序在本地调试的时候一切正常,放到线上也基本是正常,但是偶尔会有数据错误的情况,这种情况在订单系统中特别常见,因为大部分的订单状态更新都是有两个路径(浏览器跳转和支付服务器的异步推送消息),当然,最终数据要以异步结果为准,但是问题是,浏览器跳转也需要更新订单状态,当这两种方式在很短的时间内同时到达数据库时(一般在一秒内),如果数据库没有加锁,那这个订单会被处理两次。
说到建立数据表时,涉及到支付的,都要用InnoDB引擎,该引擎支持行锁,支持事务,外键。
文章开始的解决办法就是采用InnoDB对要操作的数据行进行锁定。
数据表结构
订单ID(主键)订单金额订单状态这里为了简单就只设置了几个核心字段,接下来通过两方面来更新订单。
浏览器的跳转
- BEGIN;
- SELECT * FROM `orders` WHERE `order_id`=100 FOR UPDATE;
- //业务逻辑
- COMMIT;
核心语句就三条,一条条来解释
1.BEGIN 手动开启事务(行锁只对开启事务的查询起作用)
2.FOR UPDATE 独占写(成功获得锁后,只有当前进程能够更新该纪录,其他进程如果需要更新该记录,则需进行“锁等待”)
3.COMMIT 提交处理
2. 支付服务器异步推送
处理方式跟浏览器的一样,只要加了行锁就没问题。
这样不管多大的并发过来,因为有了行锁,不会出现问题。
0 0
- MySQL高并发下的解决方案
- MySQL高并发下读取脏数据问题的解决方案
- mysql 高并发环境的解决方案
- mysql 高并发环境的解决方案
- 淘宝下单的高并发解决方案
- Mysql在高并发情况下,防止库存超卖而小于0的解决方案
- 高并发解决方案-mysql篇
- 高并发的解决方案
- 高并发的解决方案
- 大数据量下高并发同步的解决方案
- 大型网站应用之高并发情况下的解决方案
- 分布式事务,高并发下分布式事务的解决方案
- Redis实现高并发下的抢购,秒杀,解决方案
- MYSQL的高并发
- 高并发的几个解决方案
- 高并发的几个解决方案
- .net高并发的解决方案
- 高并发常见的解决方案
- 我的 sublime text3 配置
- Keymob:未来三年移动广告增速将放缓
- 关于AfxBeginThread中线程调用函数的注意事项
- 使用linux裁剪树莓派完整sd卡镜像
- 学习php的真实经历!
- MySQL高并发下的解决方案
- 杂货网络
- 学习C++的真实经验!
- ios 自适应高度
- Alpha-Beta搜索
- android的TextView展示带格式文本、首行缩进、引入自定义字体
- Keymob锁屏:三屏切换 开启移动入口平台新时代
- web开发日常
- 在Android中 使用 java.net.URI 与 android.net.Uri 的区别