MVC3缓存之一:使用页面缓存

简介: 在以前的WebForm的开发中,在页面的头部加上OutputCache即可启用页面缓存,而在MVC3中,使用了Razor模板引擎的话,该如何使用页面缓存呢? 如何启用 在MVC3中要如果要启用页面缓存,在页面对应的Action前面加上一个OutputCache属性即可。

在以前的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();
    }
}


作者:Parry
出处:http://www.cnblogs.com/parry/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

相关文章
|
4月前
|
缓存 JavaScript
vue 页面缓存 keep-alive(含配置清除页面缓存 exclude,局部缓存,动态缓存,路由控制缓存 $route.meta.keepAlive)
vue 页面缓存 keep-alive(含配置清除页面缓存 exclude,局部缓存,动态缓存,路由控制缓存 $route.meta.keepAlive)
513 0
|
缓存 JavaScript
vue中页面缓存keep-alive控制缓存清除
vue中页面缓存keep-alive控制缓存清除
|
缓存
MVC3 缓存应用
http://www.cnblogs.com/parry/archive/2011/03/19/OutputCache_In_MVC3.html http://www.cnblogs.com/parry/archive/2011/03/29/DynamicContent_OutputCache_In_MVC3.
725 0
|
缓存
MVC3缓存之三:MVC3中的局部缓存(Partial Page)
在之前的文章MVC3缓存之二:页面缓存中的局部动态中,没有注意到MVC3的版本中对输出缓存进行了修改,园友的评论中提及了此问题,所以又去抽时间看了下局部缓存的解决方案。 最后发现在发布的MVC3版本中,新增了一个叫做Partial Page的东西,即可以对载入到当前页面的另外的一个View进行缓存后输出,这与我们之前讨论的局部动态刚好相反了,即之前我们进行这个页面的缓存,然后对局部进行动态输出,现在的解决方案是:页面时动态输出的,而对需要缓存的局部进行缓存处理。
986 0
|
缓存 C# 前端开发
MVC3缓存之二:页面缓存中的局部动态
在上一篇我们讨论了MVC中使用页面缓存的一些方法,而其中由于页面缓存的粒度太粗,不能对页面进行局部的缓存,或者说,如果我们想在页面缓存的同时对局部进行动态输出该怎么办?下面我们看下这类问题的处理。 MVC中有一个Post-cache substitution的东西,可以对缓存的内容进行替换。
897 0
|
1月前
|
消息中间件 缓存 NoSQL
Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。
【10月更文挑战第4天】Redis 是一个高性能的键值对存储系统,常用于缓存、消息队列和会话管理等场景。随着数据增长,有时需要将 Redis 数据导出以进行分析、备份或迁移。本文详细介绍几种导出方法:1)使用 Redis 命令与重定向;2)利用 Redis 的 RDB 和 AOF 持久化功能;3)借助第三方工具如 `redis-dump`。每种方法均附有示例代码,帮助你轻松完成数据导出任务。无论数据量大小,总有一款适合你。
74 6
|
6天前
|
缓存 NoSQL 关系型数据库
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
本文详解缓存雪崩、缓存穿透、缓存并发及缓存预热等问题,提供高可用解决方案,帮助你在大厂面试和实际工作中应对这些常见并发场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:如何解决Redis缓存雪崩、缓存穿透、缓存并发等5大难题
|
7天前
|
存储 缓存 NoSQL
【赵渝强老师】基于Redis的旁路缓存架构
本文介绍了引入缓存后的系统架构,通过缓存可以提升访问性能、降低网络拥堵、减轻服务负载和增强可扩展性。文中提供了相关图片和视频讲解,并讨论了数据库读写分离、分库分表等方法来减轻数据库压力。同时,文章也指出了缓存可能带来的复杂度增加、成本提高和数据一致性问题。
【赵渝强老师】基于Redis的旁路缓存架构