缓存无处不在 , 你了解多少??

缓存种类

  • 浏览器缓存
  • 静态页面缓存
  • App缓存
  • 应用级缓存
  • CPU缓存
  • CDN缓存
  • DNS
  • Web代理缓存
  • 后端数据存储
  • 数据库缓存

浏览器缓存

浏览器缓存。这个前端接触比较多一些。浏览器都是基于http协议传输数据的。有5类状态码,其中有一个304状态码。Last-Modified 、Etag。减少网络传输数据,省带宽。

静态页面缓存

静态页面缓存。静态缓存在 Web 1.0 时期是非常出名,它一般通过生成 Velocity 模板或者静态 HTML 文件,放置在nginx或squid等web服务器,这样用户在访问的时候会优先访问 Web 服务器上的静态页面,在一些门户网站,使用的较多。现在更多是动静结合的方式,将页面中低频变化的元素剥离出来,提前渲染静态页面,比如商详,动态数据通过ajax实时从后端计算获取,从而减轻像tomcat、weblogic等后台应用服务器的压力。

App缓存

APP缓存。刷抖音,流畅。其实播放器中有缓存组件,在播第一个视频时,后台静默线程已经将第二、三个视频提前缓存在本地。秒开。网络差的环境特别明显。

应用级缓存

应用级缓存。本地缓存(Guava、Caffieine、Ehcache、ConcurrentHashMap)、分布式缓存( Memcache、Redis)
缓存无处不在 , 你了解多少??_第1张图片
本地缓存直接访问进程所属内存,不需要跨网络调度,避免网络交互带来的性能损耗,速度快

缓存内容不会改变。因为对多实例服务器来讲,当数据源更新后,每个单机很难感知,维护成本高。发布订阅模式

时效性要求低。能接受一定的延迟,设置较短过期时间,被动失效保持数据的新鲜度

注意事项:
控制数据条数,避免内存占用过多导致OOM,应用瘫痪。
数据时效性,写入后多久有效
实现简单,但潜在的坑比较多,选择成熟的开源框架,如 Guava Cache、Caffeine、Ehcache

Cpu缓存

CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。CPU高速缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的,当CPU调用大量数据时,就可先缓存中调用,从而加快读取速度。

当CPU需要读取数据并进行计算时,首先需要将CPU缓存中查到所需的数据,并在最短的时间下交付给CPU。如果没有查到所需的数据,CPU就会提出“要求”经过缓存从内存中读取,再原路返回至CPU进行计算。而同时,把这个数据所在的数据也调入缓存,可以使得以后对整块数据的读取都从缓存中进行,不必再调用内存。

缓存大小是CPU的重要指标之一,而且缓存的结构和大小对CPU速度的影响非常大,CPU内缓存的运行频率极高,一般是和处理器同频运作,工作效率远远大于系统内存和硬盘。实际工作时,CPU往往需要重复读取同样的数据块,而缓存容量的增大,可以大幅度提升CPU内部读取数据的命中率,而不用再到内存或者硬盘上寻找,以此提高系统性能。但是从CPU芯片面积和成本的因素来考虑,缓存都很小

  1. CPU的三级缓存
    随着多核CPU的发展,CPU缓存通常分成了三个级别:L1,L2,L3。级别越小越接近CPU,所以速度也更快,同时也代表着容量越小。L1 是最接近CPU的, 它容量最小(例如:32K),速度最快,每个核上都有一个 L1 缓存,L1 缓存每个核上其实有两个 L1 缓存, 一个用于存数据的 L1d Cache(Data Cache),一个用于存指令的 L1i Cache(Instruction Cache)。L2 缓存 更大一些(例如:256K),速度要慢一些, 一般情况下每个核上都有一个独立的L2 缓存; L3 缓存是三级缓存中最大的一级(例如3MB),同时也是最慢的一级, 在同一个CPU插槽之间的核共享一个 L3 缓存。

下面是三级缓存的处理速度参考表:

从CPU到 大约需要的CPU周期 大约需要的时间(单位ns)
寄存器 1 cycle
L1 Cache ~3-4 cycles ~0.5-1 ns
L2 Cache ~10-20 cycles ~3-7 ns
L3 Cach ~40-45 cycles ~15 ns
跨槽传输 ~20 ns
内存 ~120-240 cycles ~60-120ns

下图是Intel Core i5-4285U的CPU三级缓存示意图:

缓存无处不在 , 你了解多少??_第2张图片

CPU三级缓存

就像数据库缓存一样,获取数据时首先会在最快的缓存中找数据,如果缓存没有命中(Cache miss) 则往下一级找, 直到三级缓存都找不到时,那只有向内存要数据了。一次次地未命中,代表取数据消耗的时间越长。

  1. 带有高速缓存CPU执行计算的流程
    程序以及数据被加载到主内存
    指令和数据被加载到CPU的高速缓存
    CPU执行指令,把结果写到高速缓存
    高速缓存中的数据写回主内存
    目前流行的多级缓存结构如下图:

缓存无处不在 , 你了解多少??_第3张图片

多级缓存结构

CDN缓存

一、CDN是什么?

     http缓存是浏览器端缓存,cdn是服务器端缓存。

     举个例子来说明cdn的作用:cdn就是代理。厂家给商家发货,你从商家买货,商家就是cdn,很方便。

二、CDN怎么缓存?

      和Http类似,客户端请求数据时,先从本地缓存查找,如果被请求数据没有过期,拿过来用,如果过期,就向CDN边缘节点发起请求。CDN便会检测被请求的数据是否过期,如果没有过期,就返回数据给客户端,如果过期,CDN再向源站发送请求获取新数据。和买家买货,卖家没货,卖家再进货一个道理^^。

    CDN边缘节点缓存机制,一般都遵守http标准协议,通过http响应头中的Cache-Control和max-age的字段来设置CDN边缘节点的数据缓存时间。

DNS

DNS 是域名系统 (Domain Name System) 的缩写,是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。用户在遇到网络问题的时候,经常会先清除DNS缓存来解决。

Web代理缓存

—(待更新)

后端数据存储

—(待更新)

数据库缓存

—(待更新)

你可能感兴趣的:(缓存无处不在 , 你了解多少??)