广义上讲,凡是位于速度相差较大的两种硬件之间,用于协调二者数据传输速度差别的结构,都可称之为缓存
是一种常见的空间换时间的性能优化手段
算法
常见案例
- Linux MMU 使用LTB来缓存最近虚拟地址和物理地址的映射。
- 刷视频预缓存下一个视频
- HTTP协议 ETag
缓存与缓冲区
缓存区是用于弥补高速设备和低速设备通讯时的速度差。一块临时存储数据的区域,这些数据后面会一次性传输到其余设备上数据库
缓存分类
- 静态缓存
HTML,对动态请求的数据无力。
- 分布式缓存
Redis、Memcached
- 热点本地缓存
极端的热点数据查询。 HashMap,Guava Cache
缓存的不足
系统复杂度、数据不一致、运维、内存有限,比较适合读多写少,数据带有一点热点属性的业务场景后端
缓存的读写策略
- Cache Aside 旁路缓存策略
- 读策略
- 从缓存中读取数据
- 命中,直接返回
- 不命中,从数据库中查
- 查后,数据写入缓存,并返回给用户
- 写策略
- 更新数据库中的记录
- 删除缓存
最经常使用,但当写入比较频繁时,缓存中的数据会被频繁地清理。
- Read/Write Through 读穿/写穿策略

由缓存节点而非用户来和数据库打交道,而且写数据库是同步的,对性能来讲比较大影响缓存
- Write Back 写回策略
在写入数据时只写入缓存,并把缓存块标记为“脏”,脏块只有被再次使用时才会将其中的数据写回后端存储中

分布式缓存高可用方案
- 客户端方案
中间代理层方案
分布式
服务端方案
ide
缓存穿透
缓存中没有查到数据,不得不从后端系统中查询的状况。性能