[转载]MVC3缓存:使用页面缓存
在以前的WebForm的开发中,在页面的头部加上OutputCache即可启用页面缓存,而在MVC3中,使用了Razor模板引擎的话,该如何使用页面缓存呢?
如何启用
在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可。
我们建一个Demo来测试一下,在此Demo中,在View的Home目录下的Index.cshtml中让页面输入当前的时间。
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<div>
<h2>
现在时间:@DateTime.Now.ToString("T")</h2>
</div>
</body>
</html>
在Controllers中添加对应的Action,并加上OutputCache属性。
[HandleError]
public class HomeController : Controller
{
[OutputCache(Duration = 5, VaryByParam = "none")]
public ActionResult Index()
{
return View();
}
}
刷新页面即可看到页面做了一个10秒的缓存。当页面中数据不是需要实时的呈现给用户时,这样的页面缓存可以减小实时地对数据处理和请求,当然这是针对整个页面做的缓存,缓存的粒度还是比较粗的。
缓存的位置
可以通过设置缓存的Location属性,决定将缓存放置在何处。
Location可以设置的属性如下:
· Any
· Client
· Downstream
· Server
· None
· ServerAndClient
Location的默认值为Any。一般推荐将用户侧的信息存储在Client端,一些公用的信息存储在Server端。
加上Location应该像这样。
[HandleError]
public class HomeController : Controller
{
[OutputCache(Duration = 5, VaryByParam = "none", Location = OutputCacheLocation.Client, NoStore = true)]
public ActionResult Index()
{
return View();
}
}
缓存依赖
VaryByParam可以对缓存设置缓存依赖条件,如一个产品详细页面,可能就是根据产品ID进行缓存页面。
缓存依赖应该设置成下面这样。
在MVC3中对输出缓存进行了改进,OutputCache不需要手动指定VaryByParam,会自动使用Action的参数作为缓存过期条件。(感谢”散客游“提醒)
[HandleError]
public class HomeController : Controller
{
[OutputCache(Duration = int.MaxValue, VaryByParam = "id")]
public ActionResult Index()
{
return View();
}
}
另一种通用的设置方法
当我们需要对多个Action进行统一的设置时,可以在web.config文件中统一配置后进行应用即可。
在web.config中配置下Caching节点
<caching>
<outputCacheSettings>
<outputCacheProfiles>
<add name="Cache1Hour" duration="3600" varyByParam="none"/>
</outputCacheProfiles>
</outputCacheSettings>
</caching>
那么在Action上使用该配置节点即可,这样的方法对于统一管理配置信息比较方便。
[HandleError]
public class HomeController : Controller
{
[OutputCache(CacheProfile = "Cache1Hour")]
public ActionResult Index()
{
return View();
}
}
原文地址:http://blog.sina.com.cn/s/blog_55e42da601011lyg.html
[转载]MVC3缓存:使用页面缓存的更多相关文章
- [Asp.net]缓存之页面缓存,控件缓存,缓存依赖
		写在前面 上篇文章介绍了缓存的基本概念及用途,另外也举了一个简单的例子,数据缓存(将一些耗费时间的数据加入到一个对象缓存集合中,以键值的方式存储.可以通过使用Cache.Insert()方法来设置缓存 ... 
- 在Spring中使用cache(EhCache的对象缓存和页面缓存)
		Spring框架从version3.1开始支持cache,并在version4.1版本中对cache功能进行了增强. spring cache 的关键原理就是 spring AOP,通过 spring ... 
- vue缓存之keep-alive,设置想要缓存的页面
		由于项目需求从a页面跳转到b页面,返回a页面,a页面数据不能被刷新掉,方法很多列举12 方法1 a页面通过学期按钮切换学期,该学期里more进入b页面,返回a页面,返回回到对应a页面进入的高亮按钮设置 ... 
- 1.ehcache实现页面整体缓存和页面局部缓存
		转自:https://www.cnblogs.com/jianjianyang/p/4933016.html 好长时间没写博客了,真的是没时间啊.ps:其实就是懒!!接下来几篇要写下缓存,这里主要写下 ... 
- Nginx特性验证-反向代理/负载均衡/页面缓存/URL重定向
		原文发表于cu:2016-08-25 参考文档: Nginx 反向代理.负载均衡.页面缓存.URL重写等:http://freeloda.blog.51cto.com/2033581/1288553 ... 
- OSCache页面缓存的使用
		完成项目时,为了减少对数据库的频繁操作,引出了缓存,缓存分为以下几种: 1.一级缓存 一级缓存的存储域是session,作用于单个的dao 2.二级缓存 二级缓存的存储域是sessionFactory ... 
- asp.net 服务器端缓存与客户端缓存 [转]
		介绍: 在我解释cache管理机制时,首先让我阐明下一个观念:IE下面的数据管理.每个人都会用不同的方法去解决如何在IE在管理数据.有的会提到用状态管 理,有的提到的cache管理,这里我比较喜欢ca ... 
- Web前后端缓存技术(缓存的主要作用是什么)
		Web前后端缓存技术Web前后端缓存技术(缓存的主要作用是什么) 一.总结 一句话总结: 加快页面打开速度 减少网络带宽消耗 降低服务器压力 1.在Web应用中,应用缓存的地方有哪些? 主要有浏览器缓 ... 
- [转]MVC3缓存之一:使用页面缓存
		本文转自:http://www.cnblogs.com/parry/archive/2011/03/19/OutputCache_In_MVC3.html 在以前的WebForm的开发中,在页面的头部 ... 
随机推荐
- Linux 命令 - arp: 操作系统的 ARP 缓存
			arp 命令可以查看 ARP 缓存或者手动添加.删除缓存中的条目. 命令格式 arp [-evn] [-H type] [-i if] -a [hostname] arp [-v] [-i if] - ... 
- Linux 命令 - id: 显示用户的身份标识
			命令格式 id [OPTION]... [USERNAME] 命令参数 -a 忽略,仅为与其他版本相兼容而设计. -Z, --context 仅显示当前用户的安全环境. -g, --group 仅显示 ... 
- 随机提取N条记录[多种数据库方法]
			随机提取10条记录的例子: Sql server: select top 10 * from 表 order by newid() Access: SELECT top 10 * FROM 表 ORD ... 
- bootstrap学习起步篇:初识bootstrap之表单验证(二)
			学习bootstrap是个过程,它提供给我们的文档上有很详细的说明.包括常用的栅栏布局.页面元素等,这里就不啰嗦了,今天,我就来说下结合jquery的表单验证. 最开始不借助插件,我们需要自己去编写验 ... 
- setTimeout用法
			function faceSave() { if(confirm("确定保存?")) ... 
- PHP之HMVC
			HMVC(Hierarchical-Model-View-Controller),也可以叫做 Layered MVC.顾名思义,就是按等级划分的 MVC 模式,简单的解释就是把MVC又细分成了多个子 ... 
- plsqldev与sqldeveloper
			plsqldev连接 1.连接不同服务器,要修改tnsnames.ora文件,具体如下修改如下位置 # tnsnames.ora Network Configuration File: \app\us ... 
- Objective-C(iOS)严格单例模式正确实现
			注:本文所有权归作者所有,转载请注明出处 当希望在一个应用程序中某个类的对象只能存在一个的时候就可以考虑用单例模式来实现,单例模式在C++中比较容易实现(只需把构造函数声明为private),而在Ob ... 
- 在windows7中使用计划任务命令SCHTASKS查询计划任务失败的解决方案
			造成这种原因是因为编码问题: 因此需要修改编码:chcp schtasks.exe /query 会报错 错误: 无法加载列资源. 修改编码为936为436就可以允许啦,但是中文不不能显示啦. ... 
- Sublime Text 3初体验之Package Control
			http://www.imooc.com/article/12616 下面介绍几款Sublime Text 常用Package 1.Emmit 2.JavaScript & NodeJS Sn ... 
