网站缓存介绍

1. 什么是缓存

缓存就是根据初次访问保存输出内容的副本,当再次访问同一内容时而不需要访问其内容,只需要响应其副本的机制。根据缓存的类型的不同,缓存的内容也会有所不同。

2. 缓存类型

数据库缓存,对象缓存,网关(反向代理)缓存,代理缓存,浏览器缓存

3. 缓存有哪些属性?

命中率,命中率是指请求缓存次数和缓存返回正确结果次数的比例.比例越高,就证明缓存的使用率越高.

最大元素,缓存中可以存放得最大元素得数量,一旦缓存中元素数量超过这个值,那么将会起用缓存清空 策略,

清空策略

4. 缓存有哪些清空策略?

1 FIFO ,first in first out ,最先进入缓存得数据在缓存空间不够情况下(超出最大元素限制时)会被首 先清理出去

2 LFU , Less Frequently Used ,一直以来最少被使用的元素会被被清理掉。这就要求缓存的元素 有一个hit 属性,在缓存空间不够得情况下,hit 值最小的将会被清出缓存。

2 LRU ,Least Recently Used ,最近最少使用的,缓存的元素有一个时间戳,当缓存容量满了,而 又需要腾出地方来缓存新的元素的时候,那么现有缓存元素中时间戳离当前时间最远的元素将被清出 缓存。

5. 什么是数据库缓存?

数据库缓存机制 缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访 问的频次,从而提高了应用的运行性能。缓存内的数据是对物理数据源中的数据的复制,应用程序在 运行时从缓存读写数据,在特定的时刻或事件会同步缓存和物理数据源的数据。 数据库缓存包括查询数据库时的查询缓存(Query Cache)和数据库本身的Data Buffer。 Oracle Query Cache 是缓存执行计划的,而MySql Query Cache 不缓存执行计划而是整个结果集。 缓存整个结果集的好处是有更快的查询速度,但由于缓存的是结果集因此Query必须是完全一样的, 这样带来的后果就是平均命中率低,要求在表数据变化的时候也变化。

6. 什么是对象缓存

对象缓存用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的 次数,从而提供动态、数据库驱动网站的速度。 常用的是Memcached 是一个高性能的分布式内存对象缓存系统,它基于一个存储键/值对的 hashmap。其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过 memcached协议与守护进程通信。但是它并不提供冗余(例如,复制其hashmap条目);当某个服 务器S停止运行或崩溃了,所有存放在S上的键/值对都将丢失。

7. 如何提高对象缓存的命中率

其中很多人谈到了缓存命中率的问题,应用缓存的命中率取决于很多的因素:

1、应用场景

是OLTP还是OLAP应用,即使是OLTP,也要看访问的频度,一个极少被访问到的缓存等于没有什么 效果。一般来说,互联网网站是非常适合缓存

2、缓存的粒度

毫无疑问,缓存的粒度越小,命中率就越高,对象缓存是目前缓存粒度最小的,因此被命中的几率更 高。举个例子来说吧:你访问当前这个页面,浏览帖子,那么对于ORM来说,需要发送n条SQL,取 各自帖子user的对象。很显然,如果这个user在其他帖子里面也跟贴了,那么在访问那个帖子的时 候,就可以直接从缓存里面取这个user对象了。

3、架构的设计

    架构的设计对于缓存命中率也有至关重要的影响。例如你应该如何去尽量避免缓存失效的问题,如 何尽量提供频繁访问数据的缓存问题,这些都是考验架构师水平的地方。再举个例子来说,对于论 坛,需要记录每个topic的浏览次数,所以每次有人访问这个topic,那么topic表就要update一次, 这意味着什么呢?对于topic的对象缓存是无效的,每次访问都要更新缓存。那么可以想一些办法,例 如增加一个中间变量记录点击次数,每累计一定的点击,才更新一次数据库,从而减低缓存失效的频率。

4、缓存的容量和缓存的有效期

缓存太小,造成频繁的LRU,也会降低命中率,缓存的有效期太短也会造成缓存命中率下降。  所以缓存命中率问题不能一概而论,一定说命中率很低或者命中率很高。但是如果你对于缓存的掌握 很精通,有意识的去调整应用的架构,去分解缓存的粒度,总是会带来很高的命中率的。

8. 什么是网关(反向代理)缓存

这种机制是Web服务器隐藏在代理服务器之后,实现这种机制的服务器称作反向代理服务器(Reverse Proxy Server)。此时,Web服务器成为后端服务器,反向代理服务器称为前端服务器。引入反向代理 服务器的目的之一就是基于缓存的加速。我们可以将内容缓存在反向代理服务器上,所有缓存机制的 实现仍然采用HTTP/1.1协议。

9. 什么是代理缓存

代理服务器处于客户端与网站服务器之间。使用代理服务器的三大理由:

因为你在防火墙背后(为了安全),因此必须使用。

因为使用缓存可以显著提高任何人的页面浏览速度。

因为对于你的机器,你没有足够的“真实”IP可用。

如上图,如果存在代理服务器,那么代理服务器就处于client与反向代理服务器之间。

10. 什么是浏览器缓存?

浏览器缓存(Browser Caching)是为了加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存 储,当访问者再次请求这个页面时,浏览器就可以从本地磁盘显示文档,这样就可以加速页面的阅览。

11. 设置浏览器缓存

last-modified 和 If-Modified-Since

Etag 和 If-None-Match

用 Expires 头,过期时间

用 max-age 的 Cache-Control 头

posted @ 2014-07-06 23:13  褐色礁石  阅读(467)  评论(0编辑  收藏  举报