缓存的使用之对象缓存、URL缓存和页面缓存

前言

作为一个程序员,优化代码、提升用户体验是一件令人上瘾的事情。
假如现在我们需要加快网页加载速度,提高我们网站的吞吐量,那么实现这一目的的有效途径之一,就是缓存。在缓存当道的现在,几乎无处不在使用缓存,有浏览器端的缓存,有服务器端的缓存,有代理服务器的缓存,有ASP.NET页面缓存,对象缓存。数据库也有缓存。

这次就来介绍一下页面缓存和对象缓存。

正文

页面缓存

这种缓存技术一般用于不会经常变动信息,并且访问次数较多的页面,这样就不用每次都动态加载。
将页面在后端通过模板引擎进行解析,将生成的html文件存入redis缓存中。当前端第一次请求该页面数据时有服务端通过引擎生成,之后就从缓存中获取。

这种缓存主要用来应对短时间有大量对同一资源的请求,因此缓存有效期并不会设置的太长。
主要步骤是:1.取缓存 ()2.手动渲染 3.结果输出

举个栗子。
商品列表一般变化不大,我们就可以采用这个方式来页面缓存。展示一下返回商品列表页面的写法。

@RequestMapping(value = "/to_list", produces = "text/html")
@ResponseBody
public String toList(HttpServletRequest request, HttpServletResponse response,
                     Model model, MiaoshaUser user) {
    //model中设置user对象
    model.addAttribute("user", user);

    //页面缓存:对用户请求过的页面进行缓存,使得下一次对相同资源的请求从缓存中读取。
    //取缓存,如果当前缓存中已经有此页面,直接返回该页面html数据
    String html = redisService.get(GoodsKey.getGoodsList, "", String.class);
    if (!StringUtils.isEmpty(html)) {
        return html;
    }

    //查询商品列表
    List<GoodsVo> goodsVoList = goodsService.listGoodsVo();
    model.addAttribute("goodsList", goodsVoList);

//        return "goods_list";


    //如果没有此页面的缓存,就生成、写入缓存、返回
    SpringWebContext springWebContext = new SpringWebContext(request, response,
            request.getServletContext(), request.getLocale(), model.asMap(), applicationContext);
    //手动渲染
    html = thymeleafViewResolver.getTemplateEngine().process("goods_list", springWebContext);
    if (!StringUtils.isEmpty(html)) {
        redisService.set(GoodsKey.getGoodsList, "", html);  //有效时间60s
    }
    return html;
}

对象缓存

这是一个粒度更细的缓存。
有些使用率较高的对象,我们可以将其缓存起来,使用时直接从缓存中取,而不用去重复进行查询数据库、包装对象的步骤。比如说,我们在进行登录、改密码、查看购物车等操作时都会获取user数据,进行比较或是修改。那么我们就可以封装一个方法来专门获取user对象,并且优先从缓存中获取,只有缓存中没有的时候才会去查询数据库。这样就会提升一些性能。

要注意的是更新操作,如果对缓存数据在数据库中的对应数据进行了更新,那么我们的缓存也是要同步更新的。如果我们写的代码逻辑不对,那么就会出现问题:在同一时间有一个查询操作和一个更新操作,就有可能出现查询出来的数据不是最新,或是缓存中的数据是脏数据的情况。

因此,如何保证数据库和缓存的一致性就是一个重点。

关于正确地进行缓存更新,我放一篇文章在这里,讲的很详细。

URL缓存

URL缓存,有时候,对同一个URL请求多次,返回的数据可能都是一样的,比如服务器上的某张图片,无论下载多少次,返回的数据都是一样的。使用情景类似于页面缓存。

当Web请求抵达缓存时,如果本地有“已缓存的”副本,就可以从本地存储设备而不是从原始服务器中提取这个文档。

http缓存的好处是显而易见的,比如:

  1. 减少了冗余的数据传输,节省了网费。

  2. 减少了服务器的负担,大大提高了网站的性能

  3. 加快了客户端加载网页的速度

只需要在springboot的配置文件里配置一下spring.resources即可。

spring:
  # static
  resources:
    add-mappings: true # 启用静态资源处理
    chain:
      cache: true # 查询链的缓存
      enabled: true
      gzipped: true # 对静态页面压缩
      html-application-cache: true
    static-locations: classpath:/static/
    cache-period: 3600  # 客户端缓存静态资源的时间

结尾

缓存这部分,东西还是很多的,我会分几篇文章细细道来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值