上篇文章【Thinkphp5实现悲观锁】已介绍过thinkphp5使用悲观锁实现高并发的场景,这篇文章将实际测试下。
在shell里进入到apache的bin目录,输入以下url:
ab -n 100 -c 100 http://www.xyh.com/index/index/mysql_unlock 【不加锁的情况,模拟100次请求,每次100个用户】
备注:如果提示socket: Too many open files (24),请执行ulimit -a,然后ulimit -n 1024。下图是我已经修改后的。
由于在本机测试,如果并发太大,机器报错,需要重新编译apache。我这里只是为了测试thinkphp加锁是否能满足业务需求,所以并发设为100个,用来测试即可。数据库的商品表,我把库存设为50个。正常情况应该是:goods商品表中库存total值为0,销量sell为50,orders订单表有50条记录。经过测试,发现不加锁的情况如下图:
库存tatol为3个,销量sell为47,orders订单表有49条记录。很明显这不符合实际的业务需求!(这还是100次并发的情况,如果几十万的并发,错误更加离谱。会直接给公司带来巨大的损失)
下面再看看加锁后的测试情况:
库存tatol为0个,销量sell为50,orders订单表有50条记录。符合预期,满足业务需求!