JMeter
JMeter官网:http://jmeter.apache.org/download_jmeter.cgi
压测时候碰到空指针:cookie可能为空,要提前判断
10000个线程:mysql
自定义变量模拟多用户
1.测试计划 添加配置元件 CSV Data Set Config
2.引用变量${}
可以用配置文件,导入多用户信息。
关于循环次数:https://blog.csdn.net/u013908944/article/details/97383303
JMeter命令行
1.在windows上录好jmx
2.命令行 sh jmeter.sh -n -5 xxx.jmx -l result.jtl
-n不使用图形界面、-t输入脚本、-l输出结果
3.吧result.jtl导入jemeter
redis压测工具:redis-benchmark
1.100并发 1w请求
qps:6w多
2.100字节
springboot打war包
1.添加spring-boot-starter-tomacat的provided依赖
2.添加maven-war-plugin插件
3.修改启动类
war包要在tomcat里
jar包直接
注:
】
qps:
5000并发+循环次数10次:第一次655 第二次1200
多用户下出现了超卖现象:
怎么解决超卖现象?
超卖场景:不同用户在读请求的时候,发现商品库存足够,然后同时发起请求,进行秒杀操作,减库存,导致库存减为负数。
最简单的方法,更新数据库减库存的时候,进行库存限制条件,在reduceStock(GoodsVo goodsvo)这个方法里,sql要多加一个stock_count > 0 ,使用数据库特性来保证超卖的问题,只有stock_count还大于0的时候才去读stock_count然后减1操作
其他解决方案(超卖)
1.redis事务处理
我们可以使用redis中的监听(watch)方法,去监听库存数量,一旦库存数量在其他客户端发生改变,后续操作则会失败。
2. redis分布式锁
分布式锁确保只有一个线程会操作库存
- 加锁(占个位置,后续的进不来):setnx命令: 只在键key不存在的情况下,将键key的值设置为value 。若键key已经存在, 则不做任何动作。
- 解锁(用完了,就把位置让出来):del(key)
- 锁超时(万一中间出现点意外,没有解锁,过几秒会自动释放)expire(key,30)
3.redis队列(rpoplpush的安全队列)
把每一件商品都lpush到redis队列中,利用lpop从队列中去取