什么是缓存

存储在计算机上的一个原始数据复制集,以便于访问。 --维基百科

缓存是系统快速响应中的一种关键技术,是一组被保存起来以备将来使用的东西,介于应用开发跟系统开发之间。
根据软件系统中所处位置的不同,缓存大体可以分为三类:

  • 客户端缓存
  • 服务器缓存
  • 网络中的缓存

根据规模和部署方式缓存也可以分为:

  • 单体缓存
  • 缓存集群
  • 分布式缓存

客户端缓存

页面缓存:

  • 页面自身的缓存或者离线应用缓存,页面自身对某些元素或全部元素进行缓存,或服务端将静态页面或动态页面的元素进行缓存。
  • 页面缓存是将之前渲染的页面保存为文件,当用户再次访问时可以避开网络连接,从而减少负载,提升性能和用户体验。

浏览器缓存:

  • 根据一套与服务器约定的规则进行工作:检查确定副本是否最新,通常只要一次会话。
  • 补充------

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:占用空间最大的对象


dack
98 声望18 粉丝

一直在路上