性能优化之缓存

最近在做一个模拟股票系统,系统开发已经接近尾声了,是该到了对系统进行性能测试及性能优化的时候了。
于是用ab对系统进行冲击,我以100/sec的速度发送1000个请求,请求命令如下:
ab -n 1000 -c 100 -C sid=f6ea35fc-855a-47bb-9ef1-fe7133b7d423 http://localhost:8090/front/stockManage/proList.action?_=1335603896628

[img]http://dl.iteye.com/upload/attachment/0067/3486/475cb37a-c72d-3e61-9abc-70c81528689c.jpg[/img]

完成1000个请求处理需要31sec,这个结果显然无法按受。

于是把log设为error级,打开数据库监控,根据数据库优化顾问结果把索引建上再发动冲击
结果如下
[img]http://dl.iteye.com/upload/attachment/0067/3491/4817e014-21f9-3123-bece-d553b69f83d1.jpg[/img]

发现性能没有提高反而下降了,平均最快的50%都能在2.828秒处理完,但最长的需在6.578秒,
最长处理请求明显无法接受;
分析代码,在代码中有这么一段,就是把本地股票代码查询出来后要发http请求到sina股票数据接口去查询实时价格,如果在我们的代码中一下子发送100个http请求,请求需要排队的,所以整体性能都很慢,并且网络的IO速度肯定比本地要慢,所以必须要把数据缓存起来以减少http请求,那么整体性能将大大提高,由于价格是动态,所以我只将数据缓存10秒,


@Override
public List<StockActivity> initStockInfo(String code) {

List<StockActivity> list=(List<StockActivity>)cacheService.get(code);
if(list!=null){
return list;
}
String result = new HttpComment().access(String.format(
DATA_REQUEST_URL, code), null);
String[] acts = result.split(";");
list = new ArrayList<StockActivity>();
for (int i = 0; i < acts.length; i++) {
list.add(stockParser(acts[i]));
}
cacheService.set(code, 10, list);
return list;
}


再次对系统进行冲击结果如下:


[img]http://dl.iteye.com/upload/attachment/0067/3493/a5951a9f-71a2-3ea8-8397-d86ce7f17652.jpg[/img]

加了缓存之后最大处理时间为4.296秒,有了明显的提高,但是这样做同样带来的问题,就是在并发量很少的时候会有很多数据缓存后10秒钟到期被替换出去,这样缓存命中率就会严重下降。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值