从这一节开始就是讲如何优化秒杀的功能了。第一步考虑的是页面优化技术。
页面优化技术有:
- 页面缓存 + URL缓存 + 对象缓存
- 页面静态化,前后端分离
- 静态资源优化
- CDN优化
这篇文章先讲第一项:页面缓存 + URL + 对象缓存 具体如何实现。
页面缓存
在controller层的GoodsController中以获取商品列表的list方法举例。将原本springboot自动渲染页面改成手动渲染,把页面放在缓存里。
- 修改前的代码为:
@RequestMapping("/to_list")
public String list(Model model, HttpServletResponse response,
@CookieValue(value = MiaoshaUserService.COOKI_NAME_TOKEN,required = false) String cookieToken,
@RequestParam(value = MiaoshaUserService.COOKI_NAME_TOKEN,required = false) String paramToken) {
if (StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)) {
return "login";
}
String token = StringUtils.isEmpty(paramToken)?cookieToken:paramToken;
MiaoshaUser user = userService.getByToken(response,token);//从token中读用户信息
model.addAttribute("user", user); //将user对象和goods_list.html页面中的user“关联”
//查询商品列表
List<GoodsVo> goodsList = goodsService.listGoodsVo();
model.addAttribute("goodsList", goodsList);
return "goods_list"; //返回goods_list.html
}
大致步骤是:先通过缓存中的token获取用户;再从数据库中获取商品列表;最后渲染页面。
- 修改后的代码为:
@RequestMapping(value = "/to_list", produces = "text/html")
@ResponseBody
public String list(Model model, HttpServletResponse response, HttpServletRequest request,
@CookieValue(value = MiaoshaUserService.COOKI_NAME_TOKEN, required = false) String cookieToken,
@RequestParam(value = MiaoshaUserService.COOKI_NAME_TOKEN, required = false) String paramToken) {
if (StringUtils.isEmpty(cookieToken) && StringUtils.isEmpty(paramToken)) {
return "login";
}
String token = StringUtils.isEmpty(paramToken) ? cookieToken : paramToken;
MiaoshaUser user = userService.getByToken(response, token);//从token中读用户信息
model.addAttribute("user", user); //将user对象和goods_list.html页面中的user“关联”
//