缓存的作用

来源: 中企部落 发布时间: 2012年08月30日

缓存的作用

什么是缓存?

缓存就是用来避免频繁的到数据库或磁盘文件获取数据而建立的一个快速临时存储器。一般来说,缓存比数据库或磁盘容量更小,但是存取速度非常快。一般来说,内存是当前技术下最廉价且有效的缓存介质。内存价格低廉,但是存取速度是一般磁盘IO无法比拟的。

缓存的作用

缓存一般用来

  1. 1、存储频繁访问的数据
  2. 2、临时存储耗时的计算结果
  3. 3、内存缓存减少磁盘IO

缓存类型

在WEB开发中,缓存可以分为:

应用层缓存

应用层缓存这块跟开发人员关系最大,也是平时经常接触的。

  1. 1、缓存数据库的查询结果,减少数据的压力。这个在大型网站是必须做的。
  2. 2、缓存磁盘文件的数据。比如常用的数据可以放到内存,不用每次都去读取磁盘,特别是密集计算的程序,比如中文分词的词库。
  3. 3、缓存某个耗时的计算操作,比如数据统计。

应用层缓存的架构也可以分几种:

  1. 1、嵌入式,也就是缓存和应用在同一个机器。比如单机的文件缓存,java中用hashMap来缓存数据等等。这种缓存速度快,没有网络消耗。
  2. 2、分布式缓存,把缓存的数据独立到不同的机器,通过网络来请求数据,比如常用的memcache就是这一类。

分布式缓存一般可以分为几种:

  1. 1、按应用切分数据到不同的缓存服务器,这是一种比较简单和实用的方式。
  2. 2、按照某种规则(hash,路由等等)把数据存储到不同的缓存服务器。
  3. 3、代理模式,应用在获取数据的时候都由代理透明的处理,缓存机制有代理服务器来处理。

前端缓存

我们这里说的前端缓存可以理解为一般使用的cdn技术,利用squid等做前端缓冲技术,主要还是针对静态文件类型,比如图片,css,js,html等静态文件。

客户端缓存

浏览器端的缓存,可以让用户请求一次之后,下一次不在从服务器端请求数据,直接从本地缓存读取,可以减轻服务器负担也可以加快用户的访问速度。

缓存的更新和过期

我们这几只讲应用层的缓存。在应用层的缓存由于应经有新的数据加入,数据的修改,数据的删除等等操作,而在某些时间,我们需要这些操作及时的生效(由于用了缓存,可能会导致修改后缓存没有更新,而页面也没有变化),所以出现缓存的更新和过期的概念。

缓存的过期

缓存的过期包含:

1、时间过期

我们在缓存数据的时候我们可以指定数据缓存的最大时间,如果超过这个时间,我们就认为缓存是失效的。

2、基于规则的过期

我们在缓存中存储了某些数据来标明数据的版本。比如存取的时间,更新的时间,数据的版本信息等等。

然后比较这些信息是否有变化来判断是否过期。

缓存的更新

  1. 1、被动 - 当缓存失效的时候我们的应用程序重新从主存储器中取数据,然后重新放回缓存中。
  2. 2、主动 - 当数据一更新的时候,我们的应用主动的去更新我们的缓存内容。

乐云缓存

乐云建站系统采用了分布式3层缓存,通过系统底层实现,对开发者完全透明。开发者只要在添加模板时勾选"使用输出缓存",渲染引擎将对模板中各种数据自动缓存。

乐云缓存设置

乐云框架有效采用了三层缓存架构保证网站系统的高性能运行,减轻频繁访问数据或查询语句设计不当给数据库和Web带来的压力。

三层缓存分别是数据缓存,查询缓存,和页面缓存,

  1. 1、数据缓存 – 置于数据层的缓存,对数据库中的数据集合进行缓存,缓存时间较短,主要用来提高短时间内的频繁相同数据访问效率。
  2. 2、查询缓存 – 根据查询语句进行查询结果集的缓存,缓存时间较长,使不同模板页面或挂件中相同查询语句的处理时间大大降低。
  3. 3、页面缓存 – 置于模板层的缓存,根据页面地址将解析渲染后的最终HTML内容进行缓存,缓存永不到期,除非用户修改数据库内容。

基于以上3层缓存,经过测试,可以提升网站负载能力 70%,响应时间降低 40%-60%