## 缓存
高速缓存(英语:cache,简称缓存),在计算机中是一个用空间换时间的东西。最早指的是 CPU 和内存之间的高速缓冲,如今缓存的概念已被扩充,不仅在CPU和主内存之间有Cache,而且在内存和硬盘之间也有Cache(磁盘缓存),乃至在硬盘与网络之间也有某种意义上的Cache──称为Internet临时文件夹或网络内容缓存等。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称之为Cache。在这个章节我们只讨论互联网应用中的缓存应用技巧。
### 原则
“用空间换时间”目的是什么呢?大部分的时候就是为了使程序运行的更快,避免某些环节上的 **瓶颈** 。这是使用缓存最大的一个原则。换言之,如果不能做到更快、负载更低,那我们就需要反思技术方案的健壮性了。
### 瓶颈
说到缓存,首先需要找到整个应用的“瓶颈”,也就是相对集中、或者更慢的地方
#### 什么环节会变慢?
1. 磁盘 IO,这是整个系统中最后的操作(将数据写入磁盘,固化数据)。
2. 程序同步执行
3. 各种数据竞争、文件或者数据锁
4. 不合理的应用逻辑
5. 其他...
### 类型
准确的找到你的应用中的瓶颈,是制定技术方案、恰当的使用缓存的前提条件。
通常来说,内存比磁盘操作更快,哪怕磁盘操作是在 SSD 上进行。而毫无逻辑的文件读取,显然会比数据库操作来的更快一点。所以,只是单单从这个角度,我们可以把缓存分为:
- 内存缓存
- 文件缓存
而从缓存部署的位置来区分又可以区分为:
- 服务端缓存
- 客户端缓存
而从 WEB 应用的架构部署来区分:
- 应用层缓存
- 代理层缓存
- 内容分发网络(CDN)
不同的维度可能还有其他区分,如果我们只是把范围限定在互联网 WEB 应用的实施,那也许简单的了解和一些经典的方案,就能使你的应用承载能力有质的的飞跃。