一、本文内容
进行秒杀优化,用于增加吞吐量
二、优化内容
- 页面缓存与页面静态化
页面静态化就是将页面放在缓存中,当秒杀进行时,页面便不用重复下载,只需要下载页面中静态的数据即可。
<1> 页面缓存首先要取缓存,先从缓存中取,取不到在手动渲染,取到就返回html页面
String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
if (!StringUtils.isEmpty(html)){
return html;
}
<2>手动渲染(将html页面放入缓存之中)
WebContext ctx =new WebContext(request,response,
request.getServletContext(),request.getLocale(),model.asMap());
html = thymeleafViewResolver.getTemplateEngine().process("product_list", ctx);
if (!StringUtils.isEmpty(html)){
redisService.set(GoodsKey.getGoodsList, "", html);
}
- 对象缓存
先取缓存,取不到在将对象id作为key对象信息作为value存入reids缓存中,这个可以永久保存,但进行对象信息修改时,需要先修改数据库,再将缓存删除,防止数据库信息与缓存不一致。
public MiaoshaUser getById(long id) {
//取缓存
MiaoshaUser miaoshaUser = redisService.get(MiaoshaUserKey.getById, ""+id, MiaoshaUser.class);
if (miaoshaUser != null){
return miaoshaUser;
}
//取数据库
miaoshaUser = miaoshaUserDao.getById(id);
if (miaoshaUser != null){
redisService.set(MiaoshaUserKey.getById, ""+id, miaoshaUser);
}
return miaoshaUser;
- 商品详情静态化和秒杀静态化
商品详情静态化就是将网页中需要的数据都保存到一个vo类中,利用这个vo类向页面上传值,并且利用这个类进行对象缓存。
GoodsDetailVo goodsDetailVo = new GoodsDetailVo();
goodsDetailVo.setGoodsVo(goods);
goodsDetailVo.setMiaoshaUser(user);
goodsDetailVo.setMiaoshaStatus(miaoshaStatus);
goodsDetailVo.setRemainSeconds(remainSeconds);
return Result.success(goodsDetailVo);
由于页面保存到服务端,所以需要在application.properties中配置相关的信息。
spring.resources.add-mappings=true
spring.resources.cache.period=3600
spring.resources.chain.cache=true
spring.resources.chain.enabled=true
spring.resources.chain.compressed=true
spring.resources.chain.html-application-cache=true
spring.resources.static-locations=classpath:/static/
- 静态资源优化
1.js/css压缩,减少流量
2.多个js/css组合,减少连接数
3.使用cdn,将网站缓存在多个节点,让用户使用离他最近或者网路连接最好的节点。