博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Asp.net mvc]OutputCacheAttribute
阅读量:5965 次
发布时间:2019-06-19

本文共 9268 字,大约阅读时间需要 30 分钟。

什么是Cache?

缓存在web应用中是一种以空间换去时间的技术,把频繁访问并且不经常变化的数据存储到内存中,以达到快速访问的目的。在web应用中是比较常见的优化方式。

OutputCacheAttribute

表示一个特性,该特性用于标记将缓存其输出的操作方法。

OutpuCacheAttribute定义

代码片段

[AttributeUsageAttribute(AttributeTargets.Class|AttributeTargets.Method, Inherited = true,     AllowMultiple = false)]public class OutputCacheAttribute : ActionFilterAttribute,     IExceptionFilter

从上面的代码中可以看到该特性可以应用在类,方法上面。在mvc中,就可以直接在控制器上面或者控制器中的Action上面直接使用,做到细粒度的对缓存的控制。

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace Wolfy.OutputCacheDemo.Controllers{    [OutputCache(Duration = 10)]    public class HomeController : Controller    {        // GET: Home        public string Index()        {            return DateTime.Now.ToString();        }    }}

上面的代码是将OutputCache特性标记在了控制器类上,以达到该控制器上所有的Action都将应用该特性,过期时间设置为10s。10s后缓存过期,再访问就会更新时间。

OutputCache特性也可以设置在Action方法上面,以达到更细粒度的控制缓存。

代码片段

public class HomeController : Controller    {        [OutputCache(Duration = 10)]        // GET: Home        public string Index()        {            return DateTime.Now.ToString();        }    }

此时,只有Index的页面进行了缓存。

WebConfig

如果多个控制器或者Action使用相同的缓存配置,可以在配置文件中进行统一配置。

应用名称为myoutputcache的缓存

public class HomeController : Controller    {        [OutputCache(CacheProfile = "myoutputcache")]        // GET: Home        public string Index()        {            return DateTime.Now.ToString();        }    }

Note:

当控制器和Action同时使用了OutputCache特性时,以Action为主。

OutputCache参数

#region Assembly System.Web.Mvc.dll, v5.2.2.0#endregionusing System;using System.Web.UI;namespace System.Web.Mvc{    // Summary:    //     Represents an attribute that is used to mark an action method whose output    //     will be cached.    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]    public class OutputCacheAttribute : ActionFilterAttribute, IExceptionFilter    {        // Summary:        //     Initializes a new instance of the System.Web.Mvc.OutputCacheAttribute class.        public OutputCacheAttribute();        // Summary:        //     Gets or sets the cache profile name.        //        // Returns:        //     The cache profile name.        public string CacheProfile { get; set; }        //        // Summary:        //     Gets or sets the child action cache.        //        // Returns:        //     The child action cache.        public static System.Runtime.Caching.ObjectCache ChildActionCache { get; set; }        //        // Summary:        //     Gets or sets the cache duration, in seconds.        //        // Returns:        //     The cache duration.        public int Duration { get; set; }        //        // Summary:        //     Gets or sets the location.        //        // Returns:        //     The location.        public OutputCacheLocation Location { get; set; }        //        // Summary:        //     Gets or sets a value that indicates whether to store the cache.        //        // Returns:        //     true if the cache should be stored; otherwise, false.        public bool NoStore { get; set; }        //        // Summary:        //     Gets or sets the SQL dependency.        //        // Returns:        //     The SQL dependency.        public string SqlDependency { get; set; }        //        // Summary:        //     Gets or sets the vary-by-content encoding.        //        // Returns:        //     The vary-by-content encoding.        public string VaryByContentEncoding { get; set; }        //        // Summary:        //     Gets or sets the vary-by-custom value.        //        // Returns:        //     The vary-by-custom value.        public string VaryByCustom { get; set; }        //        // Summary:        //     Gets or sets the vary-by-header value.        //        // Returns:        //     The vary-by-header value.        public string VaryByHeader { get; set; }        //        // Summary:        //     Gets or sets the vary-by-param value.        //        // Returns:        //     The vary-by-param value.        public string VaryByParam { get; set; }        // Summary:        //     Returns a value that indicates whether a child action cache is active.        //        // Parameters:        //   controllerContext:        //     The controller context.        //        // Returns:        //     true if the child action cache is active; otherwise, false.        public static bool IsChildActionCacheActive(ControllerContext controllerContext);        //        // Summary:        //     This method is an implementation of System.Web.Mvc.IActionFilter.OnActionExecuted(System.Web.Mvc.ActionExecutedContext)        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used        //     directly from your code.        //        // Parameters:        //   filterContext:        //     The filter context.        public override void OnActionExecuted(ActionExecutedContext filterContext);        //        // Summary:        //     This method is an implementation of System.Web.Mvc.IActionFilter.OnActionExecuting(System.Web.Mvc.ActionExecutingContext)        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used        //     directly from your code.        //        // Parameters:        //   filterContext:        //     The filter context.        public override void OnActionExecuting(ActionExecutingContext filterContext);        //        // Summary:        //     This method is an implementation of System.Web.Mvc.IExceptionFilter.OnException(System.Web.Mvc.ExceptionContext)        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used        //     directly from your code.        //        // Parameters:        //   filterContext:        //     The filter context.        public void OnException(ExceptionContext filterContext);        //        // Summary:        //     This method is an implementation of System.Web.Mvc.IResultFilter.OnResultExecuted(System.Web.Mvc.ResultExecutedContext)        //     and supports the ASP.NET MVC infrastructure. It is not intended to be used        //     directly from your code.        //        // Parameters:        //   filterContext:        //     The filter context.        public override void OnResultExecuted(ResultExecutedContext filterContext);        //        // Summary:        //     Called before the action result executes.        //        // Parameters:        //   filterContext:        //     The filter context, which encapsulates information for using System.Web.Mvc.AuthorizeAttribute.        //        // Exceptions:        //   System.ArgumentNullException:        //     The filterContext parameter is null.        public override void OnResultExecuting(ResultExecutingContext filterContext);    }}

常用的属性

CacheProfile:缓存使用的配置文件的缓存名称。

Duration:缓存时间,以秒为单位,这个除非你的Location=None,可以不添加此属性,其余时候都是必须的。

OutputCacheLocation:枚举类型,缓存的位置。当设置成None时,所有缓存将失效,默认为Any。

namespace System.Web.UI{    // Summary:    //     Specifies the valid values for controlling the location of the output-cached    //     HTTP response for a resource.    public enum OutputCacheLocation    {        // Summary:        //     The output cache can be located on the browser client (where the request        //     originated), on a proxy server (or any other server) participating in the        //     request, or on the server where the request was processed. This value corresponds        //     to the System.Web.HttpCacheability.Public enumeration value.        Any = 0,        //        // Summary:        //     The output cache is located on the browser client where the request originated.        //     This value corresponds to the System.Web.HttpCacheability.Private enumeration        //     value.        Client = 1,        //        // Summary:        //     The output cache can be stored in any HTTP 1.1 cache-capable devices other        //     than the origin server. This includes proxy servers and the client that made        //     the request.        Downstream = 2,        //        // Summary:        //     The output cache is located on the Web server where the request was processed.        //     This value corresponds to the System.Web.HttpCacheability.Server enumeration        //     value.        Server = 3,        //        // Summary:        //     The output cache is disabled for the requested page. This value corresponds        //     to the System.Web.HttpCacheability.NoCache enumeration value.        None = 4,        //        // Summary:        //     The output cache can be stored only at the origin server or at the requesting        //     client. Proxy servers are not allowed to cache the response. This value corresponds        //     to the combination of the System.Web.HttpCacheability.Private and System.Web.HttpCacheability.Server        //     enumeration values.        ServerAndClient = 5,    }}

VaryByParam:用于多个输出缓存的字符串列表,并以分号进行分隔。默认时,该字符串与GET方法传递的参数或与POST方法传递的变量相对应。当被设置为多个参数时,输出缓存将会为每个参数都准备一个与之相对应的文档版本。可能值包括none,*,以及任何有效的查询串或POST参数名称。

结语

由于没找到缓存依赖mysql的办法,关于OutputCache的内容就先到这里。

关于缓存依赖的内容,可参考这篇文章

转载地址:http://fhvax.baihongyu.com/

你可能感兴趣的文章
springboot整合jersey
查看>>
Hibernate实体对象的生命周期(三种状态)
查看>>
23. Merge k Sorted Lists
查看>>
Python:pygame游戏编程之旅七(pygame基础知识讲解1)
查看>>
java B转换KB MB GB TB PB EB ZB
查看>>
通过SharpZipLib实现文件夹压缩以及解压
查看>>
20145209预备作业02
查看>>
精通CSS滤镜(filter)
查看>>
弄清楚高层到底是什么情况!
查看>>
开发中常用正则表达式
查看>>
HDU 4374 One hundred layer(单调队列DP)
查看>>
OPP Services Log
查看>>
JQuery增删改查
查看>>
android webview 全屏播放H5 (Playing HTML5 video on fullscreen in android webview)
查看>>
python的一些常用函数
查看>>
微信公众号教程(19)微信音乐播放器开发 中
查看>>
浏览器跨域问题
查看>>
部署WEB项目到服务器(二)安装tomcat到linux服务器(Ubuntu)详解
查看>>
SpringBoot之SpringBoot+Mybatis+Mysql+Maven整合
查看>>
SQLServer BI 学习笔记
查看>>