什么是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 = )]
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 = )]
// GET: Home
public string Index()
{
return DateTime.Now.ToString();
}
}

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

WebConfig

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

  <system.web>
<caching>
<outputCacheSettings>
<outputCacheProfiles >
<add name='myoutputcache' duration='10'/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
<compilation debug="true" targetFramework="4.5"/>
<httpRuntime targetFramework="4.5"/>
</system.web>

应用名称为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
#endregion using 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 = ,
//
// 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 = ,
//
// 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 = ,
//
// 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 = ,
//
// Summary:
// The output cache is disabled for the requested page. This value corresponds
// to the System.Web.HttpCacheability.NoCache enumeration value.
None = ,
//
// 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 = ,
}
}

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

结语

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

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

http://www.cnblogs.com/iamlilinfeng/p/4419362.html

[Asp.net mvc]OutputCacheAttribute的更多相关文章

  1. ASP.NET MVC Filters 4种默认过滤器的使用【附示例】

    过滤器(Filters)的出现使得我们可以在ASP.NET MVC程序里更好的控制浏览器请求过来的URL,不是每个请求都会响应内容,只响应特定内容给那些有特定权限的用户,过滤器理论上有以下功能: 判断 ...

  2. 17+个ASP.NET MVC扩展点【附源码】

    1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.  在自定义的Http ...

  3. 写自己的ASP.NET MVC框架(上)

    http://www.cnblogs.com/fish-li/archive/2012/02/12/2348395.html 阅读目录 开始 ASP.NET程序的几种开发方式 介绍我的MVC框架 我的 ...

  4. ASP.NET MVC 监控诊断、本地化和缓存

    这篇博客主要是针对asp.net mvc项目的一些常用的东东做一个讲解,他们分别是监控诊断.本地化和缓存.虽然前两者跟asp.net mvc看上去好像是没什么关联. 但其实如果真正需要做asp.net ...

  5. ASP.NET MVC 3 之表单和 HTML 辅助方法(摘抄)

    ——选自<ASP.NET MVC3 高级编程(第5章) 孙远帅 译> 第5章 表单和HTML辅助方法 本章内容简介: * 理解表单 * 如何利用HTML辅助方法 * 编辑和输入的辅助方法 ...

  6. 17+个ASP.NET MVC扩展点,含源码{转}

    1.自定义一个HttpModule,并将其中的方法添加到HttpApplication相应的事件中!即:创建一个实现了IHttpmodule接口的类,并将配置WebConfig.在自定义的HttpMo ...

  7. ASP.NET MVC 过滤器开发与使用

    ASP.NET MVC 中给我们提供了内置的过滤器,通过过滤器,我们可以在控制器内的方法前后,添加必须的业务逻辑,如权限验证,身份验证,错误处理等. 今天,我们主要介绍3个过滤器:OutputCach ...

  8. [引]ASP.NET MVC 4 Content Map

    本文转自:http://msdn.microsoft.com/en-us/library/gg416514(v=vs.108).aspx The Model-View-Controller (MVC) ...

  9. ASP.NET MVC 缓存使用示例

    应该说,缓存的设计是一门较为复杂的学问,主要考虑的问题包括:要不要缓存?要缓存哪些数据?要缓存多少数据?要缓存多久?如何更新缓存(手动还是自 动)?将缓存放在哪里?本文将以较为通俗易懂的方式,来看一看 ...

随机推荐

  1. Oracle计算两个时间戳相差秒数,精确到毫秒

    with t as (select to_timestamp('2015-01-01 11:13:15.023456', 'yyyy-mm-dd hh24:mi:ss.ff9') t1, to_tim ...

  2. postgres创建表的过程以及部分源码分析

    背景:修改pg内核,在创建表时,表名不能和当前的用户名同名. 首先我们知道DefineRelation此函数是最终创建表结构的函数,最主要的参数是CreateStmt这个结构,该结构如下 typede ...

  3. jsmooth compilation failed error null

    JSmooth 0.9.9-7 在将 jar 文件打包成 exe 文件时报错:jsmooth compilation failed error null 原因,没有指定 logo 图片文件. http ...

  4. Oracle学习笔记七 锁

    锁的概念 锁是数据库用来控制共享资源并发访问的机制. 锁用于保护正在被修改的数据 直到提交或回滚了事务之后,其他用户才可以更新数据 对数据的并发控制,保证一致性.完整性.

  5. 64位下pwntools中dynELF函数的使用

    这几天有同学问我在64位下怎么用这个函数,于是针对同一道题写了个利用dynELF的方法 编译好的程序 http://pan.baidu.com/s/1jImF95O 源码在后面 from pwn im ...

  6. android 闪屏还是会出现黑屏问题

    public class SplashActivity extends Activity{ @Override protected void onCreate(Bundle savedInstance ...

  7. 基于keepalived双主模型的高可用LVS

    背景知识: keepalived:Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web 服务器从系统中剔除, ...

  8. (一)java arcgis开发环境搭建

    一,整个开发环境 OS:Win7 Development: eclipse 4.3.2 框架:spring+springMVC+mybatis+jquery Arcgis版本:10.2 desktop ...

  9. 数据库 数据库SQL语句二

    单行函数 --操作数据对象 --接受参数返回一个结果 --只对一行进行变换 --每行返回一个结果 --可以转换数据类型 --可以嵌套 --参数可以是一列或一个值 字符函数 SQL> select ...

  10. [LeetCode] Second Highest Salary 第二高薪水

    Write a SQL query to get the second highest salary from the Employee table. +----+--------+ | Id | S ...