Java多级缓存是为了解决什么的?

前言
  提到缓存,想必每一位软件工程师都不陌生,它是目前架构设计中提高性能最直接的方式。
  缓存技术存在于应用场景的方方面面。从网站提高性能的角度分析,缓存可以放在浏览器,可以放在反向代理服务器,还可以放在应用程序进程内,同时可以放在分布式缓存系统中。
  从用户请求数据到数据返回,数据经过了浏览器,CDN,Nginx代理缓存,应用服务器,以及数据库各个环节。每个环节都可以运用缓存技术。

在这里插入图片描述
缓存的请求顺序是:用户请求 → HTTP 缓存 → CDN 缓存 → Nginx代理缓存 → 进程内缓存 → 分布式缓存。
  在技术的架构每个环节都可以加入缓存,我们看看每个环节是如何应用缓存技术的。
  
  2. HTTP缓存
  
  通常 HTTP 缓存策略分为两种:
  - 强缓存
  - 协商缓存。
  从字面意思我们可以很直观的看到它们的差别:
  - 强缓存即强制直接使用缓存。
  - 协商缓存就得和服务器协商确认下这个缓存能不能用。
  强缓存
  强缓存不会向服务器发送请求,直接从缓存中读取资源,在 chrome 控制台的 network 选项中可以看到该请求返回 200 的状态码,并且size显示from disk cachefrom memory cache;
  协商缓存
  协商缓存会先向服务器发送一个请求,服务器会根据这个请求的 request header 的一些参数来判断是否命中协商缓存,如果命中,则返回 304 状态码并带上新的 response header 通知浏览器从缓存中读取资源。
  
  2.1 HTTP 缓存控制
  
  在 HTTP 中,我们可以通过设置响应头以及请求头来控制缓存策略。
  强缓存可以通过设置ExpiresCache-Control 两种响应头实现。如果同时存在,Cache-Control优先级高于Expires
  Expires
  Expires 响应头,它是 HTTP/1.0 的产物。代表该资源的过期时间,其值为一个绝对时间。它告诉浏览器在过期时间之前可以直接从浏览器缓存中存取数据。由于是个绝对时间,客户端与服务端的时间时差或误差等因素可能造成客户端与服务端的时间不一致,将导致缓存命中的误差。如果在Cache-Control响应头设置了 max-age 或者 s-max-age 指令,那么 Expires 会被忽略。

Expires: Wed, 21 Oct 2015 07:28:00 GMT

Cache-Control
  Cache-Control 出现于 HTTP/1.1。可以通过指定多个指令来实现缓存机制。主要用表示资源缓存的最大有效时间。即在该时间端内,客户端不需要向服务器发送请求。优先级高于 Expires。其过期时间指令的值是相对时间,它解决了绝对时间的带来的问题。

Cache-Control: max-age=315360000

Cache-Control 有很多属性,不同的属性代表的意义也不同。
  可缓存性
  - public 表明响应可以被任何对象(包括:发送请求的客户端,代理服务器ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值