MVC中outputcache缓存
MVC中outputcache缓存
MVC中outputcache缓存一、页面缓存
利用页面输出缓存,可以存储呈现的 HTML,以响应相同页的后续请求。 我们可使用输出缓存来缓存整个网页或仅缓存ASP.NET 控件的输出。页面缓存可让 ASP.NET 向客户端发送页响应,而不必再次经过页处理生命周期。 页输出缓存对于那些不经常更改,但需要大量处理才能创建的页特别有用,可以极大地提高该页的性能。
可以分别为每个页配置页缓存,也可以在 Web.config 文件中创建缓存配置文件,利用缓存配置文件,只定义一次缓存设置就可以在多个页中使用这些设置。
二、OutPutCache常用属性介绍
1、Duration
用于设置页面或者用户控件缓存的时间。单位是秒。通过设置该属性,能够为来自对象的HTTP响应建立了一个过期策略,并将自动缓存页或用户控件输出。需要注意的是,Duration属性是必需的,否则将会引起分析器错误。
2、OutputCacheLocation
枚举类型,缓存的位置。当设置成None时,所有缓存将失效,默认为Any。
(1)、Any:页面被缓存在浏览器、代理服务器端和web服务器端;
(2)、Client:缓存在浏览器;
(3)、DownStream:页面被缓存在浏览器和任何的代理服务器端;
(4)、Server:页面被缓存在Web服务器端;
(5)、None:页面不缓存;
(6)、ServerAndClient:页面被缓存在浏览器和web服务器端;
3、VaryByParam
用于多个输出缓存的字符串列表,并以分号进行分隔。默认时,该字符串与GET方法传递的参数或与POST方法传递的变量相对应。当被设置为多个参数时,输出缓存将会为每个参数都准备一个与之相对应的文档版本。
可能值包括none,*,以及任何有效的查询串或POST参数名称。
如果您不想要为不同的已缓存内容指定参数,可以将其设置为none。如果想要指定所有的已缓存内容参数,可以设置为*。
4、VaryByCustom
用于自定义输出缓存要求的任意文本。如果赋予该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义字符串,则必须在应用程序的Global.asax文件中重写HttpApplication.GetVaryByCustomString方法。
5、VaryByHeader
该属性中包含由分号分隔的HTTP标头列表,用于使输出缓存发生变化。当将该属性设为多标头时,对于每个指定的标头,输出缓存都包含一个请求文档的不同版本
6、NoStore
一个布尔值,用于决定是否阻止敏感信息的二级存储。 将此属性设置为true等效于在请求期间执行代码“Response.Cache.SetNoStore();”。
7、CacheProfile
配置文件中设置缓存。 这是可选特性,默认值为空字符串 ('')。
在页中指定此属性时,属性值必须与 outputCacheSettings 节下面的 outputCacheProfiles 元素中的一个可用项的名称匹配。 如果此名称与配置文件项不匹配,将引发异常。
三、MVC中outputcache缓存实例
1、Control缓存
把缓存应用到整个Control上,该Control下的所有Action都会被缓存起来
例如:
在名为Control的Control中加入了OutputCache,并设置持续时间为10秒(Duration=10),即每10秒后过期当再次触发时更新缓存
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcCache.Control.Controllers
{
[OutputCache(Duration = 10)]
public class ControlController : Controller
{
//
// GET: /Home/
public ActionResult Index()
{
ViewBag.CurrentTime = System.DateTime.Now;
return View();
}
public ActionResult Index1()
{
ViewBag.CurrentTime = System.DateTime.Now;
return View();
}
}
}
2、Action缓存
把缓存用到Action上,Action缓存为比较常用的缓存方式,该方式粒度细一些,使用方法类似Control缓存。
例如
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcCache.Control.Controllers
{
//Control不加缓存
public class ActionController : Controller
{
//该Index的Action加缓存
[OutputCache(Duration = 10)]
public ActionResult Index()
{
ViewBag.CurrentTime = System.DateTime.Now;
return View();
}
//该Action不加缓存
public ActionResult Index1()
{
ViewBag.CurrentTime = System.DateTime.Now;
return View();
}
}
}
3、使用CacheProfile属性通过配置文件设置缓存
当我们需要将N个Control或Action加入缓存,并且缓存的参数是一致的情况下,我们可以把相关的设置放到Web.config中,并在程序中加入相应的配置。
(1)、配置文件如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" />
<add key="PreserveLoginUrl" value="true" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.web>
<!--配置缓存-->
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="TestConfigCache" duration="10"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<!--配置缓存-->
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5" />
<pages>
<namespaces>
<add namespace="System.Web.Helpers" />
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.WebPages" />
</namespaces>
</pages>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\\Microsoft.NET\\Framework\\v4.0.30319\\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\\Microsoft.NET\\Framework64\\v4.0.30319\\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
</configuration>
(2)、使用配置信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcCache.Control.Controllers
{
public class ConfigController : Controller
{
//TestConfigCache为在配置文件中配置的缓存节
[OutputCache(CacheProfile = "TestConfigCache")]
public ActionResult Index()
{
ViewBag.CurrentTime = System.DateTime.Now;
return View();
}
}
}
注:当Control与Action都应用了缓存时,以Action的缓存为主。
四、MVC3中outputcache缓存注意事项
如果使用的是 ASP.NET从1.0到4.0的OutputCache,必须在方法里面加上下面这句
Response.Cache.SetOmitVaryStar(true);
- mvc中@helper的用法
- MVC中JSON字符长度超出限制
- MVC中JS获取后台的数据
- php框架制作方法(PHP从零开始打造自己的MVC框架之路由类实现方法分析)
- ASP.NET mvc异常处理的方法
- mysql mvcc 底层原理(浅析MySQL - MVCC)
- windows server 2008r2怎么安装(Windows Server2008 R2 MVC 环境安装配置教程)
- mysql数据结构讲解(详解MySQL 数据库隔离级别与MVCC)
- mvc JavaScriptResult的用法
- asp.net MVC处理流程
- mysql乐观锁与mvcc(MySQL中的乐观锁,悲观锁和MVCC全面解析)
- php入门教程环境搭建教程(PHP从零开始打造自己的MVC框架之入口文件实现方法详解)
- mysql实现mvc(mysql的MVCC多版本并发控制的实现)
- 使用RouteDebugger对MVC路由进行调试
- MVC中outputcache缓存
- MVC中报get_RazorKeywords()错误的解决方法
- 观花盆栽佛肚竹盆景制作及养护(观花盆栽佛肚竹盆景制作及养护)
- 春天养佛肚竹,做好这几件事,叶绿根壮寓意好 越养越旺家(春天养佛肚竹做好这几件事)
- 律界衣品最好,时尚圈学识数高,41岁的Amal堪称现实版的傲骨贤妻(时尚圈学识数高)
- 刘智泰确认出演《Good Wife》 担纲男一号(刘智泰确认出演Good)
- 《傲骨之战》剧终 律政女魔头Diane,为什么是大女主天花板(傲骨之战剧终律政女魔头Diane)
- 汉族(汉族的祖先是谁)
热门推荐
- mysql快速导入1亿数据(mysql批量新增和存储的方法实例)
- 个人组建云服务器(个人云服务器搭建图文教程)
- sqlserver复制表结构及数据到新表(SQL SERVER 表与表之间 字段一对多sql语句写法)
- 怎么查看mysql运行日志(通过Query Profiler查看MySQL语句运行时间的操作方法)
- python爬虫面试经历(搞定这套Python爬虫面试题面试会so easy)
- nginx查看请求协议(Nginx之Http模块系列之autoindex模块的具体使用)
- scrapy框架爬取小说的正文内容(Scrapy框架爬取Boss直聘网Python职位信息的源码)
- php常见加密方法(PHP实现的AES 128位加密算法示例)
- docker本地项目生成镜像(docker images本地迁移的实现)
- python获取excelsheet名称(python查询文件夹下excel的sheet名代码实例)