工具:apache自带压测工具命令:
执行命令文件地址:由于我是用phpstudy安装包,所以我的地址为:D:\phpStudy\PHPTutorial\Apache\bin>
命令:ab.exe -c 100 -n 1000 "你的url" 注意,用双引号把你的url圈起来
说明: ab.exe -c(客户端) 100(客户端多少个) -n(连接) 1000(连接数)
第一种方案:常规流程:
第一种方案,在并发量不大的情况下,不会产生库存为负数的问题, 那么现在我们模拟高并发情况,在apache/bin目录执行请求命令:
第二种解决方案:开启事务,事务保证了一致性
执行结果为:还是出现超卖的问题,效果没有好转
总结:综合第一种和第二种,我们先来解决库存字段为负数的问题:
把stock_num 库存数量字段 改成无符号类型,防止库存为负数
ALTER TABLE `iwebshop_prop_stock` MODIFY COLUMN `stock_nums` INT (11) UNSIGNED NOT NULL COMMENT '道具库存' AFTER `props_id`;
我们再来测试一下:
问题:库存不产生负数了,但还是出现订单列表超卖了
第三种方案:排它锁和共享锁的问题,从数据库角度进行思考问题
mysql锁机制分为表级锁和行级锁,分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。
共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。
执行结果:现在情况好转,没有出现库存为负数的情况,订单表也没有出现超卖的记录了,不错在执行过程中,发现开启事务之后,性能会出现缓慢问题
工具:apache自带压测工具命令:
执行命令文件地址:由于我是用phpstudy安装包,所以我的地址为:D:\phpStudy\PHPTutorial\Apache\bin>
命令:ab.exe -c 100 -n 1000 "你的url" 注意,用双引号把你的url圈起来
说明: ab.exe -c(客户端) 100(客户端多少个) -n(连接) 1000(连接数)
第一种方案:常规流程:
第一种方案,在并发量不大的情况下,不会产生库存为负数的问题, 那么现在我们模拟高并发情况,在apache/bin目录执行请求命令:
第二种解决方案:开启事务,事务保证了一致性
执行结果为:还是出现超卖的问题,效果没有好转
总结:综合第一种和第二种,我们先来解决库存字段为负数的问题:
把stock_num 库存数量字段 改成无符号类型,防止库存为负数
ALTER TABLE `iwebshop_prop_stock` MODIFY COLUMN `stock_nums` INT (11) UNSIGNED NOT NULL COMMENT '道具库存' AFTER `props_id`;
我们再来测试一下:
问题:库存不产生负数了,但还是出现订单列表超卖了
第三种方案:排它锁和共享锁的问题,从数据库角度进行思考问题
mysql锁机制分为表级锁和行级锁,分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。
共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。
排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。
执行结果:现在情况好转,没有出现库存为负数的情况,订单表也没有出现超卖的记录了,不错在执行过程中,发现开启事务之后,性能会出现缓慢问题