秒杀项目(4)页面优化技术

一、页面优化技术

1.1 具体的技术

  • 页面缓存 + URL缓存 + 对象缓存
  • 页面静态化,前后端分离
  • 静态资源优化
  • CDN优化

二、页面缓存

2.1 思路

客户端请求的页面,我们先去缓存中去取,前提是客户端请求的页面并未发生改变,取到了返回给客户端,如果缓存中没有所需的页面,就需要我们手动的去渲染页面,然后将渲染好的页面缓存到redis中,然后返回给客户端。

如果我们设置的缓存是60秒,则可以理解我们看到的是60秒以前的东西。

2.2 页面缓存实现

需要注入两个对象:

@Autowired
    ThymeleafViewResolver thymeleafViewResolver;
    @Autowired
    ApplicationContext applicationContext;
 @RequestMapping(value = "/to_list",produces = "text/html")
    @ResponseBody
    public String list(HttpServletRequest request, HttpServletResponse response,Model model,MiaoshaUser miaoshaUser){
        model.addAttribute("user",miaoshaUser);
        List<GoodsVo> goodsVos = goodsService.selectAll();
        model.addAttribute("goodsList",goodsVos);
        //取缓存
        String html = redisService.get(GoodsKey.getGoodsListCresh, "", String.class);
        if(!StringUtils.isEmpty(html)){
            return html;
        }
        //缓存中没有需要手动渲染
        WebContext context = new WebContext(request,response,applicationContext,request.getLocale(),model.asMap());
        String goods_list = thymeleafViewResolver.getTemplateEngine().process("goods_list", context);
        if(!StringUtils.isEmpty(goods_list)){
            redisService.set(GoodsKey.getGoodsListCresh,"",goods_list);
        }
        return goods_list;
    }

2.3 测试

页面正常,可以成功进入到Goods_list页面
在这里插入图片描述

2.4 对象缓存

将对象添加进缓存中,每次取的时候先从对象中去取。

 //先从缓存中去取数,取不到再从数据库中取,再添加到缓存中
    public MiaoshaUser getByID(long ID) {
        MiaoshaUser miaoshaUser = service.get(MiaoshaUserKey.getByID, "" + ID, MiaoshaUser.class);
        if (miaoshaUser != null) {
            return miaoshaUser;
        } else {
            MiaoshaUser select = miaoShaUserDao.select(ID);
            if (select != null) {
                service.set(MiaoshaUserKey.getByID, "" + ID, select);
                return select;
            } else {
                return null;
            }
        }
    }

三、页面静态化

把页面直接缓存到用户的浏览器上,当用户访问页面时,直接从本地缓存中取,数据通过接口从服务端获取,

3.1 商品详情页面静态化

在这里插入图片描述

3.2 商品详情页面静态化思路

	<!-- 直接请求静态页面 -->
			<td><a th:href="'/goods_detail.htm?goodsId='+${goods.id}">详情</a></td>

点击详情按钮,直接去请求静态页面

静态页面的存放位置:不需要thymeleaf模块引擎的渲染,我们只需要把页面所需的数据传给页面即可。
在这里插入图片描述

3.3 页面静态化相关配置

#启用静态资源处理
spring.resources.add-mappings=true 
#缓存的时间
spring.resources.cache-period=3600 
#查找链上添加缓存
spring.resources.chain.cache=true
spring.resources.chain.enabled=true
#静态页面是否需要压缩
spring.resources.chain.gzipped=true
spring.resources.chain.html-application-cache=true

四、订单详情静态化,解决卖超

1.1 一个用户同时来了两个秒杀请求

解决方法:

  • 在下订单的模块,在对应的表上建立唯一索引,在Miaosha_order上,user_id和Goods_id上建立唯一索引。
  • 秒杀的过程在事务中进行

1.2 静态资源优化的常用手段

  • JS/CSS压缩,减少流量
  • 多个JS/CSS组合,减少连接数,一次连接全部下载下来,不需要多次进行连接。
  • CDN 内容分发网络,把数据缓存到多个节点上,用户请求时先去最近的节点去取资源,可以解决网络拥堵。

1.3 并发优化的思路

  • 浏览器的页面静态化
  • 请求部署之前,部署CDN节点
  • NGIX
  • 应用程序的页面缓存
  • 对象缓存
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值