缓存技术和用户层缓存原理

Posted 林炜玮_51CTO

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存技术和用户层缓存原理相关的知识,希望对你有一定的参考价值。

缓存cache

互联网应用领域,提到缓存为王

cache为了调节速度不一致的两个或多个不同的物质的速度,置于中间,可以实现速度较快的一方加速访问速度较慢的一方的作用。

缓存技术和用户层缓存原理_数据

buffer与cache

buffer:缓冲,也叫写缓冲,一般用于写操作,可以将数据先写入内存在写入磁盘,buffer 一般用于写缓度,用于解决不同介质的速度不一致的缓冲,先将数据临时写入到里自己最近的地方,以提高写入速CPU会把数据先写到内存的磁盘缓冲区,然后应用认为数据已经写入完成,然后由内核在后续的时间再写入磁盘,所以服务器突然断电会丢失内存中的部分数据

缓存技术和用户层缓存原理_服务器_02

cache:缓存,也叫读缓存,一般用于读操作,CPU读文件从内存读,如果内存没有,就先从硬盘读到内存

缓存保存位置及分层结构

  • 用户层: 浏览器DNS缓存,应用程序DNS缓存,操作系统DNS缓存客户端
  • 代理层: CDN,反向代理缓存
  • Web层: 解释器Opcache,Web服务器缓存
  • 应用层: 页面静态化
  • 数据层: 分布式缓存,数据库
  • 系统层: 操作系统cache
  • 物理层: 磁盘cache, Raid Cache

cache的特性

自动过期:给缓存的数据加上有效时间,超出时间后自动过期删除

强制过期:源网站更新图片后CDN是不会更新的,需要强制是图片缓存过期 ,通过CDN管理后台实现

命中率:即缓存的读取命中率

用户层缓存

1、DNS缓存:浏览器的DNS缓存默认为60秒,即60秒之内在访问同一个域名就不在进行DNS解析

2、浏览器缓存过期机制:最后修改时间 last-modified(需要向服务器发送请求

如果带有 Last-Modified ,下一次发送Http 请求时,将会自动携带此时间值的 If-modified-since 的 Http请求Header 。

如果没有过期,将会收到 304 的响应,从缓存中读取。

浏览器发起请求后,WEB服务器会将服务器端的文件的最后修改时间和本地浏览器缓存中的文件时间相比,如果没有发生变化就返回给浏览器304的状态码,表示没有发生变化,然后浏览器就使用的本地的,缓存展示资源,如果变化,则重服务器发送变化的新资源

缓存技术和用户层缓存原理_服务器_03


3、Etag 标记(需要向服务器发送请求

Etag 是 Http 响应报文Header 字段, 代表资源的标签,在服务器端生成。如果响应报文中的资源带有Etag ,下一次发送请求时自动携带 If-None-Match 首部字段指定此Etag的值,服务器判断如果 Etag没有变化将收到 304 的响应,从缓存中读取。

4、过期时间 expires 和 Cache-Control

以上两种都需要发送请求,即不管资源是否过期都要发送请求进行协商,这样会消耗不必要的时间,因此有了缓存的过期时间

Expire 是 Http响应Header, 代表资源的过期时间,由服务器段设置。如果带有 Expire ,则在 Expire 过期前不会发生 Http 请求,直接从缓存中读取。但当用户执行 F5 强制刷新例外

缓存技术和用户层缓存原理_服务器_04

5、Last-Modified,Etag,Expire判断流程图

缓存技术和用户层缓存原理_缓存_05

通常 Last-Modified,Etag,Expire 是一起混合使用的

特别是 Last-Modified 和 Expire 经常一起使用,因为 Expire 可以让浏览器完全不发起 Http 请求,而当浏览器强制 F5 的时候又有 Last-Modified ,这样就很好的达到了浏览器段缓存的效果。

Etag 和 Expire 一起使用时,先判断 Expire ,如果已经过期,再发起 Http 请求,如果 Etag 变化了,则返回新资源的 200 响应。如果 Etag 没有变化,则返回 304 的缓存响应。

Last-Modified,Etag,Expires 三个同时使用时。先判断 Expire ,如果过期,则然后发送 Http 请求,服务器先判断 last-modified ,再判断 Etag ,必须都没有过期,才能返回 304 响应。

cookie 和 session

Cookie是访问某些网站以后在本地存储的一些网站相关的信息,下次再访问的时候减少一些步骤,比如加密后的账户名password等信息

Cookies是服务器在客户端浏览器上存储的小段文本并随每一个请求发送至同一个服务器,是一种实现客户端保持状态的方案。

session称为会话信息,位于web服务器上,主要负责访问者与网站之间的交互,当浏览器请求http地址时,可以基于之前的session实现会话保持、session共享等


以上是关于缓存技术和用户层缓存原理的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis缓存

数据缓存层及相关知识

搞懂分布式技术13:缓存的那些事

golang sync.pool对象复用 并发原理 缓存池

Nginx---负载均衡和缓存

Computed缓存原理