MVC缓存(一)
//OutputCache是设置缓存,参数Duration设置缓存的过期时间,OutputCache可以加到Controller上,也可以加到Action上,但是当Controller与Action都应用了OutputCache时,以Action的OutputCache为主。
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace MvcApplication1.Controllers 8 { 9 [OutputCache(Duration = 10)] 10 public class ControlController : Controller 11 { 12 // 13 // GET: /Control/ 14 [OutputCache(Duration = 20)] 15 public ActionResult Index() 16 { 17 ViewBag.Text = System.DateTime.Now; 18 return View(); 19 } 20 public ActionResult Index2() 21 { 22 ViewBag.Text = System.DateTime.Now; 23 return View(); 24 } 25 } 26 }
当多个Controller或者Action都要设置缓存,并且缓存的数据都是一致的时候,可以把对缓存的配置写到web.config的system.web节点下
1 <?xml version="1.0" encoding="utf-8"?> 2 <!-- 3 For more information on how to configure your ASP.NET application, please visit 4 http://go.microsoft.com/fwlink/?LinkId=169433 5 --> 6 7 <configuration> 8 <appSettings> 9 <add key="webpages:Version" value="2.0.0.0" /> 10 <add key="webpages:Enabled" value="false" /> 11 <add key="PreserveLoginUrl" value="true" /> 12 <add key="ClientValidationEnabled" value="true" /> 13 <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 14 </appSettings> 15 <system.web> 16 <!--配置缓存--> 17 <caching> 18 <outputCacheSettings> 19 <outputCacheProfiles> 20 <add name="TestConfigCache" duration="10"/> 21 </outputCacheProfiles> 22 </outputCacheSettings> 23 </caching> 24 <!--配置缓存--> 25 <httpRuntime targetFramework="4.5" /> 26 <compilation debug="true" targetFramework="4.5" /> 27 <pages> 28 <namespaces> 29 <add namespace="System.Web.Helpers" /> 30 <add namespace="System.Web.Mvc" /> 31 <add namespace="System.Web.Mvc.Ajax" /> 32 <add namespace="System.Web.Mvc.Html" /> 33 <add namespace="System.Web.Routing" /> 34 <add namespace="System.Web.WebPages" /> 35 </namespaces> 36 </pages> 37 </system.web> 38 <system.webServer> 39 <validation validateIntegratedModeConfiguration="false" /> 40 41 <handlers> 42 <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 43 <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 44 <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 45 <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" /> 46 <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" /> 47 <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" /> 48 </handlers> 49 </system.webServer> 50 51 </configuration>
取web.config中的配置
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Web; 5 using System.Web.Mvc; 6 7 namespace MvcCache.Control.Controllers 8 { 9 public class ConfigController : Controller 10 { 11 //TestConfigCache为在配置文件中配置的缓存节 12 [OutputCache(CacheProfile = "TestConfigCache")] 13 public ActionResult Index() 14 { 15 ViewBag.CurrentTime = System.DateTime.Now; 16 return View(); 17 } 18 19 } 20 }
OutputCache的常用属性
1)CacheProfile:缓存使用的配置文件的缓存名称。
2)Duration:缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。
3)OutputCacheLocation:枚举类型,缓存的位置。当设置成None时,所有缓存将失效,默认为Any。
Any:页面被缓存在浏览器、代理服务器端和web服务器端;
Client:缓存在浏览器;
DownStream:页面被缓存在浏览器和任何的代理服务器端;
Server:页面被缓存在Web服务器端;
None:页面不缓存;
ServerAndClient:页面被缓存在浏览器和web服务器端;
4)VaryByParam:用于多个输出缓存的字符串列表,并以分号进行分隔。默认时,该字符串与GET方法传递的参数或与POST方法传递的变量相对应。当被设置为多个参数时,输出缓存将会为每个参数都准备一个与之相对应的文档版本。可能值包括none,*,以及任何有效的查询串或POST参数名称。