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

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

缓存就是数据交换的缓冲区(称作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. POJ 3978(求素数)

    知识点:      1.求素数的test,从2~sqrt(n):           2.假设数据非常多,能够用素数表记录,然后sum=prime[m]-prime[n]求得! ! !! !!! !! ...

  2. js动态函数

    最近项目中使用百度模板引擎baiduTemplate.js,使用动态函数解析模板中代码. 通过new Function([arg1,arg2,...,argN,]functionBody)方式实现动态 ...

  3. 小贝_mysql select连接查询

    select连接查询 简要: 一.union联合查询 二.左右内连接 一.union联合查询 作用: 把2次或多次查询结果合并起来 具体: (表1查询结果) union (表2查询结果) 运行: 先算 ...

  4. FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解(转)

    1.StorageClient与StorageClient1的区别 相信使用happy_fish的FastDFS的童鞋们,一定都熟悉StorageClient了,或者你熟悉的是StorageClien ...

  5. 运维基础-IO 管道

    什么是文件描述符FD或者文件句柄? 通过构建一个带有编号标记的通道(文件描述符)的进程结构来管理打开的文件.今晨连接到文件,从而达到这些文件所代表的的数据内容或者设备.通过使用通道0.1.2(称为标准 ...

  6. 如何求文件File的字节数

      [java]代码库 import java.io.*;   /**  * 获取文件的字节数  */   class FileInputStreamS {     public static voi ...

  7. makefile编写---.c .cpp 混合编译makefile 模板

    # c.cpp混合编译的makefile模板 # # BIN = client_system BASE_INSTALL_DIR := /opt/arm-2009q1 BUILD_TOOL_DIR := ...

  8. CentOS 安装和配置 Mantis

    Mantis是一个基于PHP技术的轻量级的开源缺陷跟踪系统,以Web操作的形式提供项目管理及缺陷跟踪服务.在功能上.实用性上足以满足中小型项目的管理及跟踪.更重要的是其开源,不需要负担任何费用. 1. ...

  9. javascript中提高代码的封装性

    我出的面试题中,有一条是问如何避免页面引用JS,出现函数.变量重复.冲突的. 从大的方面讲,应该引入javascript的模块化开发,符合AMD规范之类: 从小的方面说,大概就是限定变量和函数的作用域 ...

  10. kbmmw 5 的日志备份功能简介

    kbmmw 自从4.8.2 版本里增加了日志管理以后,随着版本升级,增加了很多功能,使用方法也有所改变. 功能也越来越强大. 今天说一下 kbmmw5 里面的日志备份,顺便演示一下新的使用方法. 我们 ...