• 一、页面输出缓存


          返回目录 | 下一篇

          本缓存机制是.NET环境中比较简单的缓存机制,其作用是将整个aspx页面的内容保存在服务器的内存中。这样,用户在访问该页面的时候,直接从服务器内存中调用,而不用和数据库进行交互,除非缓存数据过期,才重新从数据库取一次数据。这样的环境比较适合于一些经常不用变动的数据页面。

          使用方法非常简单,在aspx页面顶部添加如下声明。

    <%@ OutputCache Duration="60" VaryByParam="none" %>

          对于上面的声明,解释一下参数的意思:

          Duration:缓存过期时间(单位:秒)。上述声明表示本页面在每60秒过期一次(即:在60秒时间内,该页面是读取的服务器缓存里面的数据,并没有直接从数据库获取数据),这个参数是必填的!

          VaryByParam:根据POST(或GET)过来的参数来更新缓存内容,如果需要多个参数,用分号隔开。如果不想要任何参数来修改缓存内容,则将其值设置为:none;如果希望所有的参数都能修改缓存内容,则将其值设置为:*。

          范例如下:

    测试页面缓存 - 前台代码
    1 protected void Page_Load(object sender, EventArgs e)
    2 {
    3     if (!IsPostBack)
    4     {
    5         Literal1.Text = DateTime.Now.ToString();
    6     }
    7 }

           如果想根据Url里面的某一个参数进行缓存的更新,则可以在“VaryByParam”的等号后面添加该参数的名称,例如,普通情况下,在访问本页面的时候,我们可以输入Url为:http://localhost:17112/Default.aspx,即使是带有参数的情况下访问该页面,例如:http://localhost:17112/Default.aspx?a=1,也不会对页面的内容有任何的影响,因为在页面顶部声明缓存的时候,我将“VaryByParam”后面的值填的“none”,如果将此值改为上面第二个Url中的参数“a”,则本页面会因为参数“a”的改变而改变页面内容,当“a”在赋相同的值的时候,页面没有变化,如果在页面过期时间(即:60秒)内,改变参数“a”的值,页面的内容也会产生相应的变化。

          如果需要的是多个参数,例如:http://localhost:17112/Default.aspx?a=1&b=2&c=3,那么,在声明页面缓存的时候,应该将“VaryByParam”的值赋为:a;b;c,即:VaryByParam="a;b;c"。

          OutputCache 指令中的其它属性参数描述如下:

    OutputCache 其它属性

          当然,如果很多页面都添加了页面缓存,而且它们的缓存时间又都设置得是一样的,这个时候,我们就可以利用web.config来统一配置这些缓存的过期时间,这样可以达到一处改动,在多处都能起到相应的作用,配置的范例如下:

    web.config的配置

          这样一来,我们在页面顶部就可以添加如下所示的页面缓存声明方式就可以了:

    1 <%@ OutputCache CacheProfile="CacheConfig" VaryByParam="none" %>

          但是需要注意几点:

                1、如果在页面中的用户控件内声明OutputCache,是不支持CacheProfile属性的。

                2、所添加的CacheProfile必须在web.config中存在。

          还可以通过页面中的控件的变化,来修改页面缓存,声明如下所示(假设页面上存在一个ID为DropDownList1的下拉菜单):

    1 <%@ OutputCache Duration="60" VaryByParam="none" VaryByControl="DropDownList1" %>

          上面说了这么多,全都是在前台页面上来设置页面缓存,.NET还提供了通过后台代码来实现页面缓存。页面输出缓存API的缓存策略就是用Response的Cache属性,该方式的核心是调用System.Web.HttpCachePolicy。该类主要包含了用户设置缓存特定的HTTP标头的方法和用于控制ASP.NET页面输出缓存的方法。下面说几个常用的方法:

          SetExpires 用于设置缓存过期的绝对时间。它的参数是一个DataTime类的实例,表示过期的绝对时间。

        SetLastModified 用于设置页面的Last-Modified HTTP标头。Last-Modified HTTP标头表示页面上次修改时间,缓存将依靠它来进行计时。如果违反了缓存限制层次结构,此方法将失败。该方法的参数是一个DataTime类的实例。

        SetSlidingExpiration 该方法将缓存过期从绝对时间设置为可调时间。其参数是一个布尔值。当参数为true时,Cache-Control HTTP标头将随每个响应而更新。此过期模式与相对于当前时间将过期标头添加到所有输出集的IIS配置选项相同。当参数为False时,将保留该设置,且任何启用可调整过期的尝试都将静态失败。此方法不直接映射到HTTP标头。它由后续模块或辅助请求来设置源服务器缓存策略。

        SetOmitVaryStar ASP.NET 2.0新增的方法。用于指定在按参数进行区分时,响应是否应该包含vary:*标头。方法参数是一个布尔值,若要指示HttpCachePolicy不对其VaryByHeaders属性使用*值,则为true;否则为false

        SetCacheability 用于设置页面的Cache-Control HTTP标头。该标头用于控制在网络上缓存文档的方式。该方法有两种重载方式,所不同的是参数。一种重载方法的参数是HttpCacheability枚举值,包括NoCachePrivatePublicServerServerAndNoCacheServerAndPrivate(有关这些枚举值的定义,可参考MSDN)。另一种方法的参数有两个,一个参数是HttpCacheability枚举值,另一个参数是字符串,表示添加到标头的缓存控制扩展。需要注意的是,仅当与PrivateNoCache指令一起使用时,字段扩展名才有效。如果组合不兼容的指令和扩展,则此方法将引发无效参数异常。

        返回目录 | 下一篇

  • 相关阅读:
    redis_ 5 集群
    redis_4 主从模式
    redis_3 持久化
    redis_2 数据类型
    linux_ubuntu 连接xftp
    redis_1 安装和简单使用
    Activiti 各个节点涉及的表
    oracle 数据库imp操作导入dmp文件时表空间问题
    ORA-27101: shared memory realm does not exist 错误的处理
    oralce清理user 和tablespace.
  • 原文地址:https://www.cnblogs.com/jacksonwj/p/1519822.html
Copyright © 2020-2023  润新知