MVC 缓存

项目中,经常遇到用户登录后获取菜单。

由于菜单不会经常变更,所以我们可以缓存用户菜单。


假设用户登录后,跳转到 我们的 MainIndex:

Action:(下面第一行就是缓存)

[OutputCache(CacheProfile = "MainPage_Index")]
        public ActionResult Index()
        {
            return View();
        }

View:(其中@Html.Action("GetMenu"))就是获取菜单的主要方法。

<div class="main">
<!-左边菜单->
        @{
            if (((WD_Employee)Session["User"]) != null)
            {
            @Html.Action("GetMenu")
            }
 
        }

<!-右边屏幕->
        <div class="sanjhb_main fl" style="padding: 0;">
            <iframe id="myFrameName" name="myFrameName" style="width: 100%; height: 100%;" src="~/Html/Default.html"></iframe>
        </div>
        <div class="cb"></div>
    </div>

最后在web.config中配置一下:

<system.web>
    <sessionState mode="InProc" timeout="600" />
    <caching>
      <outputCacheSettings>
        <outputCacheProfiles>
          <add name="MainPage_Index" duration="120" enabled="true" location="ServerAndClient" varyByParam="none" />
        </outputCacheProfiles>
      </outputCacheSettings>
    </caching>
</system.web>

参数说明

CacheProfile 

用于定义与该页关联的缓存设置的名称。是可选属性,默认值为空字符("")。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。在页面中指定此属性时,属性值必须与Web.config文件<outputCacheSettings>配置 节下的outputCacheProfiles元素中的一个可用项的名称匹配。如果此名称与配置文件项不匹配,将引发异常。

NoStore 

该属性定义一个布尔值,用于决定是否阻止敏感信息的二级存储。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。将此属性设置为true等效于在请求期间执行代码“Response.Cache.SetNoStore();”。 

Duration 

用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,Duration属性是必需的,否则将会引起分析器错误。 

Shared 

该属性定义一个布尔值,用于确定用户控件输出是否可以由多个页共享。默认值为false。注意,包含在ASP.Net页中的@ OutputCache指令不支持此属性。 

Location 

用于指定输出缓存项的位置。其属性值是OutputCacheLocation枚举值,它们是Any、Client、Downstream、None、 Server和ServerAndClient。默认值是Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。需要注意的是,包含在用户控件中的@ OutputCache指令不支持此属性。 

SqlDependency 

该属性标识一组数据库/表名称对的字符串值,页或控件的输出缓存依赖于这些名称对。需要注意:SqlCacheDependency类监视输出缓存所依赖 的数据库中的表,因此,当更新表中的项时,使用基于表的轮询将从缓存中移除这些项。当通知(在SQL Server 2005中)与CommandNotification值一起使用时,最终将使用SqlDependency类向SQL Server 2005服务器注册查询通知。另外,SqlDependency属性的CommandNotification值仅在ASP.NET页中有效。控件只能将 基于表的轮询用于@ OutputCache指令。 

VaryByControl 

该属性使用一个分号分隔的字符串列表来更改用户控件的输出缓存。这些字符串代表在用户控件中声明的ASP.NET服务器控件的ID属性值。除非已经包含了VaryByParam属性,否则在@ OutputCache指令中,该属性是必需的。 

VaryByCustom 

用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在 应用程序的Global.asax文件中重写HttpApplication.GetVaryByCustomString方法。 

VaryByHeader 

该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版 本。VaryByHeader属性在所有HTTP 1.1缓存中启用缓存项,而不仅限于ASP.NET缓存。用户控件中的@ OutputCache指令不支持此属性。 

VaryByParam 

该属性定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用GET方法属性发送的查询字符串值对应,或与用POST方法 发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的 查询字符串或POST参数名称。值得注意的是,在输出缓存ASP.NET页时,该属性是必需的。它对于用户控件也是必需的,除非已经在用户控件的@ OutputCache指令中包含了VaryByControl属性。如果没有包含,则会发生分析器错误。如果不需要使缓存内容随任何指定参数发生变化, 则可将该值设为“none”。如果要使输出缓存根据所有参数值发生变化,则将属性设置为“*”。



posted @ 2017-03-08 10:36  正怒月神  阅读(151)  评论(0编辑  收藏  举报