上篇文章【 Thinkphp5实现悲观锁 】已介绍过 thinkphp 5使用悲观锁实现高并发的场景,这篇文章将实际测试下。
在 shell 里进入到apache的bin目录,输入以下命令:
ab -n 100 -c 100
命令解释:不加锁的情况,模拟100次请求,每次100个用户
备注:如果提示 socket : Too many open files (24),请执行ulimit -a,然后ulimit -n 1024。下图是我已经修改后的。
由于在本机测试,如果并发太大,会出现”apr_socket_recv: Connection reset by peer (104)”报错,需要重新编译apache。我这里只是为了测试thinkphp加锁是否能满足业务需求,所以并发设为100个,用来测试即可。
测试准备:数据库的商品表,库存total设为50,销量sell为0,订单表清空。
正常情况应该是:goods商品表中库存total值为0,销量sell为50,orders订单表有50条记录。经过测试,发现不加锁的情况如下图:
不加锁代码的测试结果:库存tatol为3个,销量sell为47,orders订单表有49条记录。
很明显这不符合实际的业务需求!(这还是100次并发的情况,如果几十万的并发,错误更加离谱。会直接给公司带来巨大的损失)
下面再看看加锁后的测试情况:
加锁代码的测试结果:库存tatol为0个,销量sell为50,orders订单表有50条记录。符合预期,满足业务需求!
希望以上的代码和测试结果能帮到大家,如果写的有问题,或者不明白的地方,欢迎评论,我会一一解答!这几天项目比较急,恐怕没时间更新,等项目搞完了,会再更新的。