使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面

Donut Caching是缓存除了部分内容以外的整个页面的最好的方式,在它出现之前,我们使用“输出缓存”来缓存整个页面。

何时使用Donut Caching

假设你有一个应用程序中有像“主页”这种页面,它除了用户登录的用户名以外总是给用户呈现相同的或者很少变化的内容。这时你可能需要缓存大部分的内容。加入你使用“输出缓存”并应用一个VaryByParam UserID来做缓存处理,那么整个页面会为每个访问用户生成缓存,但是这当我们有很大量的登陆用户是就不是一个好的缓存方式了。

为了解决这种问题,Donut Caching提出了为所有用户只缓存一份副本,并且包含一小部分动态的内容,这一小部分动态的内容就像甜甜圈上的洞一样。

Donut Caching 的Nuget 包

使用Donut Caching之前,你需要在Visual studio中使用Nuget安装包,一般直接键入命令安装:

install-package MvcDonutCaching

安装完成后,你就可以通过在action或者controller上添加DonutOutputCache标签来控制缓存了,大多数OutputCache的标签都可以在DonutOutputCache中使用。

public class HomeController : Controller
    {
        [DonutOutputCache(Duration = 60,VaryByParam="username")]
        public ActionResult Index(string username)
        {
            return View();
        }

        [DonutOutputCache(Duration=60)]
        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }
    }

Donut Hole Caching

Donut Hole Caching和Donut Caching刚好相反,它用来缓存页面中的一小部分。

何时使用Donut Hole Caching

假设你有一个应用程序,它需要在每个页面里显示产品列表,那么这时以HTML的形式缓存一个产品列表就是很需要的了,Donut Hole Caching就是设计来处理这种情况的啦,ASP.NET MVC可以通过设置ChildActionOnly标签来支持子请求

[ChildActionOnly]
        [DonutOutputCache(Duration=60)]
        public ActionResult CategoryList()
        {
            return View(categoryService.GetCategories);
        }

原文地址:http://www.dotnet-tricks.com/Tutorial/mvc/ODJa210113-Donut-Caching-and-Donut-Hole-Caching-with-Asp.Net-MVC-4.html

时间: 2024-08-02 02:49:08

使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面的相关文章

ASP.Net Web API 输出缓存 转载 -- Output caching in ASP.NET Web API

原文的转载地址:http://www.strathweb.com/2012/05/output-caching-in-asp-net-web-api/ 一.Nuget安装相关dll Web API 2 : Install-Package Strathweb.CacheOutput.WebApi2 Web API 1 : Install-Package Strathweb.CacheOutput 二.新建一个 ActionFilterAttribute ,并重写相关方法 public class

.NET 页面缓存

ASPX.NET 页面缓存页面缓存的使用方法非常的简单,只需要在aspx页的顶部加一句声明<%@ OutputCache Duration="60" VaryByParam="none" %>这样整个页面的内容都会被缓存,页面中的ASP.NET代码.数据源在缓存期间都不会被运行,而是直接输出缓存的页面内容.页面缓存是针对所有这个页面的访问者.这样1个访问者和1万个访问者.一次访问和100万次访问对数据库的压力是一样的. Duration="60

ASP.NET MVC 数据库依赖缓存的实现

当数据库中的信息发生变化的时候,应用程序能够获取变化的通知是缓存依赖得以实现的基础.应用程序可以通过轮询获取数据变化的信息,使用轮询的话也不可能重新查一次后再和以前的数据做比较,如果这样的话如果我一个表里面有1000行数据我要是读100次的话是不是得比较1000 x 100 次,显然这种方法是不可行的,那怎么办呢?大家都学过触发器吧,实现数据库依赖缓存的轮询机制就是通过触发器来实现的. 实现步骤简单分析:     首先创建一个用于记录监控信息的表,表的字段就两个一个是表名,一个是版本号.然后,对

MVC基础知识

1.ASP.NET MVC请求过程 1 2.Controller (1) 控制器在ASP.NET MVC中扮演着处理客户端请求的角色 1)必须实现System.Web.Mvc.IController接口 ->通常直接继承System.Web.MVC.Controller类 2)必须要以Controller结尾 3)通过不同的Action来处理具体的客户端请求 3.Action (1) 是指在继承了System.Web.Mvc.Controller类中所定义的返回值的类型可以兼容 (2)Actio

[转]MVC Action Filter

ASP.NET MVC Framework支持四种不同类型的Filter: Authorization filters – 实现IAuthorizationFilter接口的属性. Action filters – 实现IActionFilter接口的属性. Result filters – 实现IResultFilter接口的属性. Exception filters – 实现IExceptionFilter接口的属性. Filter的默认的执行顺序按上面的列表中顺序进行.如验证(author

MVC 之 缓存机制(二)

八.应用程序缓存 应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中. 使用应用程序缓存与使用应用程序状态类似. 但是,与应用程序状态不同的是,应用程序缓存中的数据是易失的, 即数据并不是在整个应用程序生命周期中都存储在内存中. 使用应用程序缓存的优点是由 ASP.NET 管理缓存,它会在项过期.无效.或内存不足时移除缓存中的项. 还可以配置应用程序缓存,以便在移除项时通知应用程序. 应用程序缓存的使用模式:确定在访问某一项时该项是否存在于缓存中,如果存在,则使用. 如果该项不

.Net3月份开发札记

筛选数据 需求:如果数据库中存在OrderNum相同,且IsDefault不同的记录,那么IsDefault值为0的记录将替换值为1的记录(IsDefault值为1的记录不展示). 由于查出来的数据不多,100条以内,所以我是直接全部查询到List内存中,然后再内存中进行数据过滤的操作,思来想去都觉得我如下的实现方式很low,但是我一时又没想到好的办法,不知道大家有没有好的办法? var newList = list.ToList(); //筛选出哪些排序号有重复 var orderNumLis

基于MVC的优点Advantages of an MVC-Based Web Application

ASP.NET MVC 框架具有以下优点: 它很容易通过将应用程序划分为模型. 视图和控制器管理的复杂性. 它不使用视图状态或基于服务器的窗体.这使得 MVC 框架特别适合开发人员想要完全控制应用程序的行为. 它使用处理 Web 应用程序请求通过单一控制器前端控制器模式.这使您能够设计支持丰富的路由基础结构的应用程序.更多的信息,请参阅 MSDN 网站上的前端控制器. 它为测试驱动开发 (TDD) 提供了更好的支持. 它非常适合 Web 应用程序支持的大型团队的开发人员和 Web 设计人员需要高

YII框架——页面缓存

首先,要知道页面缓存是在什么时候使用的.一般是在所有操作之前缓存文件. yii中有个behaviors()方法,在控制器的所有方法之前执行.所以一般在这个方法中缓存页面. public function behaviors() { return[ [ 'class'=>'yii\filters\PageCache', 'duration'=>1000, 'dependency'=>[ 'class'=>'yii\caching\FileDependency', 'fileName'