关于缓存的基础概念

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于缓存的基础概念相关的知识,希望对你有一定的参考价值。

  缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如 CPU 的一级、二级缓存是保存了 CPU 最近经常访问的数据,内存是保存 CPU 经常访问硬盘的数据,而且硬盘也有大小不一的缓存,甚至是物理服务器的 raid 卡有也缓存,都是为了起到加速 CPU 访问硬盘数据的目的,因为 CPU 的速度太快了, CPU 需要的数据硬盘往往不能在短时间内满足 CPU 的需求,因此 PCU 缓存、内存、 Raid 卡以及硬盘缓存就在一定程度上满足了 CPU 的数据需求,即 CPU 从缓存读取数据可以大幅提高 CPU 的工作效率。

缓存分类

系统缓存:buffer/cache

buffer

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

cache

  缓存也叫读缓存,一般用于读操作, CPU 读文件从内存读,如果内存没有就先从硬盘读到内存再读到 CPU,将需要频繁读取的数据放在里自己最近的缓存区域,下次读取的时候即可快速读取。

cache特性

  1. 自动过期:给缓存的数据加上有效时间,超出时间后自动过期删除
  2. 过期时间: 强制过期,源网站更新图片后 CDN 是不会更新的,需要强制是图片缓存过期
  3. 命中率: 即缓存的读取命中率

CDN缓存

  内容分发网络(Content Delivery Network),通过将服务内容分发至全网加速节点,利用全球调度系统使用户能够就近获取,有效降低访问延迟,提升服务可用性, CDN 第一降低机房的使用带宽,因为很多资源通过 CDN 就直接返回用户了,第二解决不同运营商之间的互联,因为可以让联通的网络访问联通让电信的网络访问电信,起到加速用户访问的目的, 第三:解决用户访问的地域问题,就近返回用户资源。

CDN服务商

百度 CDN: https://cloud.baidu.com/product/cdn.html
阿里 CDN: https://www.aliyun.com/product/cdn?spm=5176.8269123.416540.50.728y8n
腾讯 CDN: https://www.qcloud.com/product/cdn

用户请求CDN流程

  提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外 CDN 可以将数据根据访问的热度不同而进行不同级别的缓存,例如访问量最高的资源访问 CD 边缘节点的内存,其次的放在 SSD 或者 SATA,再其次的放在云存储,这样兼顾了速度与成本。

技术图片

CDN优势

  1. 提前对静态内容进行预缓存,避免大量的请求回源,导致主站网络带宽被打满而导致数据无法更新,另外 CDN 可以将数据根据访问的热度不同而进行不同级别的缓存,例如访问量最高的资源访问 CD 边缘节点的内存,其次的放在 SSD 或者 SATA,再其次的放在云存储,这样兼顾了速度与成本。缓存-缓存到最快的地方如内存,缓存的数据准确命中率高,访问速度就快
  2. 调度准确:将用户调度到最近的边缘节点
  3. 性能优化:CDN 专门用于缓存响应速度快
  4. 安全相关:抵御***
  5. 节省带宽:由于用户请求由边缘节点响应,因此大幅降低到源站带宽。

应用层缓存

  nginxphp 等 web 服务可以设置应用缓存以加速响应用户请求, 另外有些解释性语言比如 PHP/Python不能直接运行,需要先编译成字节码,但字节码需要解释器解释为机器码之后才能执行,因此字节码也是一种缓存,有时候会出现程序代码上线后字节码没有更新的现象。

其他层面缓存

  CPU 缓存(L1 的数据缓存和 L1 的指令缓存)、二级缓存、三级缓存
技术图片

以上是关于关于缓存的基础概念的主要内容,如果未能解决你的问题,请参考以下文章

《Java架构筑基》从Java基础讲起——基础类型缓存池概念

小白总结的一些关于JS的基础概念

#yyds干货盘点# Redis概念和基础

Shiro基础概念1

Git基础概念

接口测试基础二--关于接口测试的的几个基本概念