缓存无处不在,所展示出的仅仅是服务器端的缓存,我们从细节层面一层层分析

但是在此之前,我们先要知道什么是缓存与为什么要使用缓存,是时候百度一波喽~

缓存就是数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找。由于缓存的运行速度比内存快得多,故缓存的作用就是帮助硬件更快地运行。

当然缓存不仅限于存储在内存当中,所以我们可以理解成将数据存储在快介质中并优先在快介质中查找

so,缓存的好处显而易见了,那就是查询速度变快,并且不再进行之后的io操作了,合理的使用缓存可以极大的提升吞吐量,从而的好良好的性能!但是缺点也很明显那就是成本问题,一个简单的例子就是我们都知道固态盘比机械盘贵好几倍,当然我说的是企业级的固态盘,听说最近intel新出了一款黑科技固态盘速度已经可以干内存了,但是容量是不到150G而价格简直是天价,不过相信随着科技的不断提升,固态盘变成主流的时间不会太远

下面是现在主流介质的速度排列,容量早提升了可以忽略

其中寄存器是在cpu内的,有兴趣的可以看看计算机硬件方面的知识,高速缓存也就是L2级缓存,也是硬件方面的,intel的cpu之间是共享高速缓存的,而AMD则是每个cpu单独维护各自的高速缓存,so,AMD之间在保持高速缓存一致性上有极大的困难;当然图中每一层又可以细分出各自的速度比,好比磁盘ssd跟机械盘的速度那就差很多

再说一个题外话那就是Buffe与Cache的区别,最简单地说

Buffe是为了写,是写缓冲

Cache是为了读,是读缓存

好了,这里我们的缓存就是Cache了,我们从一个请求的开始分析

一.客户端本身的缓存

客户端访问页面后第一步就是去解析我们的域名,在正常情况下不配置hosts文件时都会去访问设置的dns服务器,然后获取解析出的ip,然后访问此ip,这时候才开始与我们的服务器开始真正开始进行通讯,然后获取我们提供的页面进行后续操作

在这些流程中,如果我之前访问过该网站,那么又会如何呢?

  1.首先浏览器会从自己的缓存中读取dns,看看有木有,不同的浏览器过期时长不同,然后还有客户端本身操作系统也会看看自己是否开启了dns缓存,然后去验证,还有就是我们服务端的语言也是可以在访问页面时给客户端写缓存的

  2.如果都没有的话,我们就去dns服务器解析吧,dns服务器也分很多种,也许我们访问dns服务器就是一台缓存dns,他其实本身不解析,就是记缓存,如果有此缓存就会直接返回,如果没有,一般就会去递归长训返回了

  3.Ok,到此我们终于拿到了正确的目标ip了,我们与该ip进行连接拿页面啦~但是页面上有三类内容,html、css、js,而且还有好多的外部链接指向图片啊,uri啊,甚至还有ifname,这些内容我们也都要请求一遍嘛?如果我们是首次访问,那么很可惜,答案是肯定的,我们需要全部访问一遍,不过随着技术的发展,前端技术有异步加载及惰性加载,我们现在只需要加载并访问下载一些必须的内容了

  4.但是如果我们访问过呢?那么这里面信息量又变大了呦~~~~5555555555,开车了!老司机光顾那肯定是轻车熟路的嘛,各种套餐的价格早已做到了心中有数,就不需要再多要一份了,但是我们都知道现在生意竞争激烈,大家都喜欢提供各种时价的跟特殊优惠,这种我们就必须要每次取一份, 但是如何分辨出哪些需要取的哪些是不需要的呢?那在套餐前面加一个标签不就好了么,但是这个标签是什么,每家的规矩都是不同的,但是还是可以总结成四种

Etag:打标签,如果标签没变那就不需要去取了

过期时间:告知此资源什么时候过期,那么在此之前那就不用取了

Last-modified:根据此文件的最后修改时间判断,如果时间没变那就是没修改就不用取了

前端技术:直接在html里添加<link>标签

最后总结下~

二.代理层的缓存

历经千辛万苦终于连接到了服务器,好开心,23333333,你太天真了,一边情况下你根本没有连接到服务器!wtf,那我tm刚才都干了些什么,现在我看到的资源是哪个王八蛋提供的?

答案是cdn厂商,随着时间的推移,现在大家都可以用到cdn了,这对中小型企业十分友好,cdn的知识也很深奥,各家厂商也各有特色,不过多描述,直接总结下cdn为我们做的事情

  1. 提供就近访问
  2. 缓存热点数据
  3. 安全防护
  4. 智能dns
  5. 应用层技
  6. 各厂商特色服务

哈哈哈哈,北方对自己的的ps的技术简直无语了~~~~

三.web层缓存

这次我们终于真正意义上的抵达了服务商的服务器,姆Q~~~

服务器需要对我们的操作进行解析,然后发送数据给后端,后端有各自的业务代码来处理我们的各类请求,我们都知道语言有很多,大体分为解释性语言跟编译性语言,那么为了提升我们代码的速度,我们是不是对可以做一些缓存优化呢?答案是要根据语言而论的,像php我们就可以打开opcache,但是像Python就没有什么好做的了

其实我们的web服务器上本身也是可以开启缓存的哦,如apache的mod_cache模块与Nginx的fastcgi缓存

四.应用层缓存

我们提供的页面有的数据是需要变化的,有的是静态的,有的是从数据库内获取然后返回前端展示的,因此我们尽量要将页面做的静态化,因为这样数据才可以被缓存下来,如果是一直在变那么缓存了也没有意义了

五.数据层缓存

这一层用户就已经感知不到了,因为这已经是服务器内部之间的交互了

常规情况下我们将数据放置在mysql中,首先mysql服务层有缓存,然后Mysql不同的引擎带有各自的缓存,dba应该比较了解,小北方对数据库很不熟悉,就不班门弄斧了

再者就是分布式缓存服务器,redis用的比较多,组件一个集群缓存热点数据,应用程序会调用对应的库去操作它进行存储获取数据操作,它本身就是缓存服务器,为的就是提升数据获取的速度。

六.系统层

这一层的缓存主要就是内存了嘛,内存出现的意义就是因为cpu与磁盘之间速度的不对等,所以需要一层过渡层

再就是cpu内部的缓存,L1、L2、L3级缓存

七.物理层

物理层的设备有什么缓存?

其实我们的raid卡上是带有缓存的,而且还自带小电池你敢信?默认情况下是关闭的

再就是磁盘本身也有一些缓存,只是这个数值实在是太小了,因此我们一般不开

题外话就是有些服务器只识别raid设备,所以单盘我们就直接做个raid0就好,其实ssd不建议做raid,更建议作为日志盘来,其实就是写缓冲来平衡机械盘的速度,因为我们写文件落盘是要先到日志盘再到底层盘

web缓存概述的更多相关文章

  1. [转载]WEB缓存技术概述

    [原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...

  2. Web缓存杂谈

    一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...

  3. Web缓存杂谈--Etag & If-None-Match

    一.概述 缓存通俗点,就是将已经得到的‘东东’存放在一个相对于自己而言,尽可能近的地方,以便下次需要时,不会再二笔地跑到起始点(很远的地方)去获取,而是就近解决,从而缩短时间和节约金钱(坐车要钱嘛). ...

  4. 【转】HTTP学习---Web 缓存

    [原文]https://www.toutiao.com/i6592743068623962632/ 1. 前端缓存概述 前端缓存主要是分为HTTP缓存和浏览器缓存.其中HTTP缓存是在HTTP请求传输 ...

  5. Web缓存技术

    本章导读 缓存主要是为了提高数据的读取速度.因为服务器和应用客户端之间存在着流量的瓶颈,所以读取大容量数据时,使用缓存来直接为客户端服务,可以减少客户端与服务器端的数据交互,从而大大提高程序的性能. ...

  6. 【Web技术】337- 秒懂 Web 缓存

    点击上方"前端自习课"关注,学习起来~ 最近把前端缓存重新整理了一下,从整体的层面上把前端所有能用的缓存方案梳理了一遍.同时,对于http缓存,使用了表格的方案,使得原先晦涩难记的 ...

  7. 作为前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  8. 前端应当了解的Web缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  9. 浅谈Web缓存

    在前端开发中性能一直都是被大家所重视的一点,然后判断一个网站的性能最直观的就是看网页打开的速度. 其中提高网页反应的速度的一个方式就是使用缓存.一个优秀的缓存策略可以缩短网页请求资源的距离,减少延迟, ...

随机推荐

  1. C#基础关键字

    1:override & new public class A { public virtual void Test() { Console.WriteLine("A Test()& ...

  2. Windows 7 &amp; Ubuntu 14.04完美双系统安装及系统引导配置----校园网Mentohust配置

    本文写于完美安装双系统之后,所以图片会不全然.主要目的是总结下注意事项.备用. 一.Win7-64-旗舰版U盘安装 win7-64-旗舰版纯净版下载,下载安装后仅仅有1个驱动人生! 附刻盘工具激活工具 ...

  3. Lombok简介

    Lombok简介 和其他语言相比,Java经常因为不必要的冗长被批评.Lombok提供了一系列注解用以在后台生成模板代码,将其从你的类中删除,从而有助于保持你的代码整洁.较少的模板意味着更简洁的代码, ...

  4. Effective Java - [2. 创建与销毁对象]

    让对象的创建与销毁在掌控中. Item 1: 使用静态工厂方法而非使用构造函数 public static Boolean valueOf(boolean b) { return b ? Boolea ...

  5. In Git, there are two main ways to integrate changes from one branch into another: the merge and the rebase.

    https://git-scm.com/book/en/v2/Git-Branching-Rebasing

  6. docker: Dockerfile命令介绍

    前一章介绍了Dockerfile创建镜像的方法,Dockerfile文件都是一些指令,因此要掌握Dockerfile就必须了解这些指令.这一章就介绍下Dockerfile的指令. From: 功能为指 ...

  7. 时间操作(Java版)—获取给定日期N天后的日期

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/wangshuxuncom/article/details/34896777         获取给定 ...

  8. 【WordSearch】Word Search

    Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from l ...

  9. php MVC原理

    一直用php的mvc模式,但是一直没深入研究其原理性的东西,今天把最基本的mvc原理模型总结如下: 1.url访问方式  http://127.0.0.1:8080/ceshi.com/index.p ...

  10. Python 参数校验的进化

    Python 函数参数魔法 事情的起因是感觉目前项目中的参数校验方法写的太简单了,很多时候需要在server层再if else处理,于是就动手准备写一个好用一点的,可以自定义校验参数规则的参数校验器, ...