什么是缓存
存储在计算机上的一个原始数据复制集,以便于访问。 --维基百科
缓存是系统快速响应中的一种关键技术,是一组被保存起来以备将来使用的东西,介于应用开发跟系统开发之间。
根据软件系统中所处位置的不同,缓存大体可以分为三类:
- 客户端缓存
- 服务器缓存
- 网络中的缓存
根据规模和部署方式缓存也可以分为:
- 单体缓存
- 缓存集群
- 分布式缓存
客户端缓存
页面缓存:
- 页面自身的缓存或者离线应用缓存,页面自身对某些元素或全部元素进行缓存,或服务端将静态页面或动态页面的元素进行缓存。
- 页面缓存是将之前渲染的页面保存为文件,当用户再次访问时可以避开网络连接,从而减少负载,提升性能和用户体验。
浏览器缓存:
- 根据一套与服务器约定的规则进行工作:检查确定副本是否最新,通常只要一次会话。
- 补充------
app缓存
网络中的缓存
web代理缓存
边缘缓存
服务端缓存
数据库缓存
- 数据库属于IO密集型的应用,主要负责数据的管理及存储。数据库缓存是一类特殊的缓存,是数据库自身的缓存机制。
- 以mysql为例,mysql中使用了查询缓冲机制,将SELECT语句和查询结果存放在缓冲区中,以后对于同样的SELECT语句,讲直接从缓存区中读取结果,以节省查询时间,提高了sql查询的效率。
平台级缓存
- 在系统开发中,适当的使用平台级缓存往往可以取得事半功倍的效果。
- 在这里指用来写带有缓存特性的应用框架,或者可用于缓存功能的专用库。
应用级缓存
当平台级缓存不能满足系统性能要求时,就要考虑使用应用级缓存了。应用级缓存,需要开发者通过代码来实现缓存机制,这里是nosql的胜场,无论是Redis还是MongoDB,以及Memcached都可以作为应用级存储的重要技术。
缓存算法:在实现缓存应用的时候,需要了解缓存技术中的几个术语。
- 缓存命中:请求的数据在缓存中。
- 没有命中:cache miss,如果缓存中还有存储空间,那么没有命中的对象会被储存到缓存中来。
- 存储成本:当cache miss,系统会从数据库或者其他数据源取出数据,然后放入存储,这个过程需要时间和空间,这就是缓存成本。
- 缓存失效:当存储在缓存中的数据需要更新时,就以为着缓存中的这一数据失效了。
-
替代策略:当缓存没有命中时,并且缓存容量已经满了,就需要在缓存中去除一条旧数据,然后加入一条新数据,替代的选择就有替代策略决定。
- Least-Recently-Used(LRU):最近被请求最少的对象
- Least-Frequently-Used(LFU):访问次数最少的对象
SIZE:占用空间最大的对象
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。