ASP.NET Cache缓存管理基于web的缓存

<%@ OutputCache
Location="Any" 输出缓存可以位于发出请求的客户端浏览器,代理服务器,处理请求的服务器,对应于HttpCacheability.public
Location="Client" 输出缓存位于发出请求的客户端,对应于HttpCacheability.private
Location="Downstream" 输出缓存可以存储在任何HTTP1.1 可缓存设备中,源服务器除外,这包裹代理服务器和发出的请求的客户端。
Location="server" 输出缓存可以位于处理请求的 web 服务器上,此值对应于 HttpCacheability.Server
Location="ServerAndClient" 输出缓存只能存储在原服务器或发出请求的客户端中,代理服务器不能缓存响应,此值对应于HttpCacheability.private和HttpCacheability.Server枚举值的组合。
Location="None" 对于请求的页,金庸输出缓存,此值对应于 HttpCacheability.NoCache 枚举值;
>
<?xml version="1.0"?>

<!--
  有关如何配置 ASP.NET 应用程序的详细信息,请访问
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<!--默认设置为 Any-->
<configuration>
    <system.web>
        <caching>
            <outputCacheSettings>
                <outputCacheProfiles>
                    <add name="aaa" duration="30" varyByCustom="none"/>
                </outputCacheProfiles>
            </outputCacheSettings>
        </caching>
        <compilation debug="false" targetFramework="4.0" />
    </system.web>
<!--在页面通过@OutputCache 的CacheProfile 指定配置文件中的Profile 名称。-->
</configuration>


缓存后替换
有三种方式实现缓存后替换
1.以声明的方式使用Substitution控件
2.已编程的方式使用Substitution控件
3.使用AdRotator控件

Substitution控件指定缓存页中动态创建而不进行而不进行缓存的部分。Substitution 空间祈祷占位符的作用,动态生成的内容将输出到Substitution空间所在的位置。

使用声明的方式
在运行时,Substitution控件调用 MethonName 属性所指定的方法,此方法必须返回一个字符串,这个字符串就是动态的输出内容。然后,此字符串将替换Substitution
控件的内容,该方法必须是Page或者 UserControl 包含控件上的静态方法。


使用Substitution API
在 System.Web 命名空间中,定义了一个表示缓存后替换内容的委托HttpResponseSubstitutionCallback 定义如下:
public delegate string HttpResponseSubstitutionCallback(HttpContext context);

以编程的方式为缓存的页创建动态内容,可以将符合要求的方法名称传递给HttpResponse的WriteSubstitution 方法,这个方法可以来源于:
1.当前页或者是用户控件上的静态方法
2.任意对象上的静态方法或者实例方法。


AdRotator控件
AdRotator服务器控件在内部实现对缓存后替换的支持。如果将AdRotator空间放在页面上,则无论是否缓存页面,都将在每次请求时生成的动态广告。因此,包含AdRotator控件的页面应该仅仅在服务端缓存。


客户端缓存,代理缓存和服务器端缓存
内容出列可以在服务器端缓存之外,还可以缓存在客户端和中间代理类服务器上。既可以申明性设置,也可以在代码中设置。

设置浏览器端缓存
可以通过在HTTP回应的中增加特定的头部说明,可以指定浏览器的缓存策略。


几个缓存的要点
Expires(优先级低,设置浏览器端的缓存绝对时间) | Cache-Control(优先级高,相对过期时间 max-ag=10[秒])| 
如果是一个可能会被修改的资源怎么办?可以通过Last-Modified来进行说明,Last-Modified可以告诉浏览器这个资源的最后修改时间,在下一次刘乱起请求的时候,浏览器将发送一个请求到服务器上,并附上
if-Unmodified-Since 头来说明浏览器缓存的资源所创建的时间。如果服务器发现这个资源并没有修改过,那么,将发送一个304(Not Modified)回应给浏览器,而不必在发送一次实际的内容,发送一个304
给浏览器比发送实际的内容小多了,自然就节省了带宽 。若果服务器已经修改过了,那么,将照常将内容返回给客户端。


为什么一定要用Last-Modified呢?这是因为,即使浏览器缓存了资源,但是如果用户点击了浏览器的刷新按钮,那么,浏览器会不管缓存的内容,依旧发送一个请求到服务器上,所以,Last-Modified还是有用的,
而且还要和 Expires 一起用。

除了Last-Modified之外,ETag 也是一个强大的工具,服务器可以通过ETag返回给浏览器一个资源的ID号,下次留暖气发送到请求服务器的时候,可以将从前收到的ETag作为新版本,那么将发送一个正常的回应,在附带一个资源ID
如果服务器没有新的版本,那么,服务器可以返回一个304(Not Modified),告诉浏览器,服务器并没有修改过这个资源。这样服务器就有个一个版本管理的意思。

虽然ETag看来不错,不过,如果服务器上用了聚群,那么碎语同一个资源,不同服务器返回的ETag很可能不同,我们的缓存也失去了意义,所以建议不要使用ETag.

posted @ 2012-07-07 22:13  blog_yuan  阅读(454)  评论(0)    收藏  举报