1.什么是缓存
缓存:一种存储数据的组件,让数据请求更快的返回(缓存可以放在内存中,但是缓存!=内存)
目的:协调两者数据传输差异的结构
内存读写速度远大于磁盘读写速度
1.1缓存的案例
- MMU内存管理,将虚拟地址转换成物理地址
- 通过TLB的组件缓存最近转换过的地址映射,将复杂运算结果缓存
- 抖音
- 不会一个个的视频打开
- 同时打开几个视频,并缓存在播放器中
- HTTP
- 第一次请求静态资源时,会获取Etag的头部
- 浏览器缓存图片+tag
- 下一次请求时,会通过If-None-Match请求服务器,如果没有改变服务器返回304状态码
- 浏览器就会继续沿用缓存图片
2.缓存与缓冲
缓存:提升高低速设备的访问速度,减少高低速设备的访问问题
缓冲区:临时存储数据的区域,数据会被纯属到其他设备(异步的,解决不同设备的处理问题)(类似消息队列)
例如:在内存中设置一块缓冲区,当缓冲区写满再刷入磁盘
3.缓存分类
- 静态缓存
- 通过缓存文件,避免直接请求数据库内容
- 将每篇文章渲染成静态页面,放置在前端服务器上,优先访问静态页面(执行一定的清理策略)
- 分布式缓存
- 通过分布式方案突破单机限制
- 本地也可以部署缓存,例如hashmap(由于请求服务器不同,可能导致数据不一致,没有命中缓存)
- 热点本地缓存
4.缓存的不足
缓存的主要作用:提升访问速度,抵抗更大的并发
缓存的不足
-
缓存受限于读多写少的业务场景,数据带有一定的热点属性
- 读少写多的场景不适合
-
缓存会给整体系统带来复杂度,数据不一致的风险
- 较短的过期时间和手动清理的方式解决
-
缓存介质内存并不是无限的
- 设置过期时间
-
缓存给运维带来一定的成本
5.总结
- 缓存可以用很多层
- 静态缓存
- 分布式缓存
- 本地缓存
- 越下层越脆弱
- 缓存是一种思想
- 任何能加速读速度的手段都称为缓存