项目地址及项目具体介绍-码云仓库:https://gitee.com/flowers-bloom-is-the-sea/distributeNodeSolvePessimisticLockByRedis
测试1:
这里使用jmeter同时启动2各线程:
原来的数据库表的数据:
goods的数据是:
id stock
------ --------
1 999
goods_order里没有数据。
测试结果:
通过打断点调试,goods_order的表里插入了1条数据,goods的库存减一。两个项目工程确实会有一个的isLock为true另一个为false.
这样实际上就完成测试了,但是只能说这个算一个数据量还不够的测试。
测试2:
对于这个超卖的业务进行压力测试:
jmeter开了2个线程组,一组的测试端口为localhost:8081/goods/buyGoodByUserId/1/1
另一组为localhost:8082/goods/buyGoodByUserId/1/1
,每一组分别1000以上线程来访问,同时启动这2组线程组。
预测结果:对于同一用户,肯定是只能买1份物品,因为锁在redis里获取,一次只有一个线程可以成功,其他线程失败(也就是2000以上线程仅1个线程成功);对于线程组而言肯定仅一个线程组的一个线程操作成功。
测试结果:
这个线程组1000多个线程全部操作失败:
这个线程组1000多个线程仅1个成功:
查看了数据库的数据,预测成立,确实库存减一,goods_order数据新增1条。