PHP秒杀场景防止超卖问题,采用apache自带压测工具

 

背景:看了好多秒杀解决方案,其实都只停留在理论阶段,没有自行进行测试过,今天我们就来模拟一下大并发流量,加深对秒杀方案的理解

工具:apache自带压测工具命令:

执行命令文件地址:由于我是用phpstudy安装包,所以我的地址为:D:\phpStudy\PHPTutorial\Apache\bin>

命令:ab.exe -c 100 -n 1000 "你的url" 注意,用双引号把你的url圈起来

说明: ab.exe -c(客户端) 100(客户端多少个) -n(连接) 1000(连接数)

第一种方案:常规流程:

 第一种方案,在并发量不大的情况下,不会产生库存为负数的问题, 那么现在我们模拟高并发情况,在apache/bin目录执行请求命令:

ab.exe -c 100 -n 1000 "localhost/index.php?controller=stock&action=updateStock
执行的结果为:

第二种解决方案:开启事务,事务保证了一致性

执行结果为:还是出现超卖的问题,效果没有好转

总结:综合第一种和第二种,我们先来解决库存字段为负数的问题:

把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目录执行请求命令:

ab.exe -c 100 -n 1000 "localhost/index.php?controller=stock&action=updateStock
执行的结果为:

第二种解决方案:开启事务,事务保证了一致性

执行结果为:还是出现超卖的问题,效果没有好转

总结:综合第一种和第二种,我们先来解决库存字段为负数的问题:

把stock_num 库存数量字段 改成无符号类型,防止库存为负数

ALTER TABLE `iwebshop_prop_stock` MODIFY COLUMN `stock_nums` INT (11) UNSIGNED NOT NULL COMMENT '道具库存' AFTER `props_id`;

我们再来测试一下:

问题:库存不产生负数了,但还是出现订单列表超卖了

第三种方案:排它锁和共享锁的问题,从数据库角度进行思考问题

mysql锁机制分为表级锁和行级锁,分享一下我对mysql中行级锁中的共享锁与排他锁进行分享交流。

共享锁又称为读锁,简称S锁,顾名思义,共享锁就是多个事务对于同一数据可以共享一把锁,都能访问到数据,但是只能读不能修改。

排他锁又称为写锁,简称X锁,顾名思义,排他锁就是不能与其他所并存,如一个事务获取了一个数据行的排他锁,其他事务就不能再获取该行的其他锁,包括共享锁和排他锁,但是获取排他锁的事务是可以对数据就行读取和修改。

 执行结果:现在情况好转,没有出现库存为负数的情况,订单表也没有出现超卖的记录了,不错在执行过程中,发现开启事务之后,性能会出现缓慢问题

猜你喜欢

转载自www.cnblogs.com/php-json/p/12557725.html
今日推荐