使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏古时的风筝

ASP.NET-自定义HttpModule与HttpHandler

在之前的ASP.NET是如何在IIS下工作的这篇文章中介绍了ASP.NET与IIS配合工作的机制,在http请求经过一系列处理后,最后到达ASP.NET管道中...

2678
来自专栏码农阿宇

.Net Core使用Redis的一个入门简单Demo

本例子讲述一个在.Net core环境中对Redis数据库进行增删改查操作。 首先,要安装好Redis数据库,至于怎么安装,本文不再赘述,可以自行百度,有很...

2655
来自专栏Porschev[钟慰]的专栏

Asp.net 后台添加CSS、JS、Meta标签(帮助类)

#region##添加JS文件 ///<summary> /// 添加JS文件 /// 创建人:Porschev ///...

2055
来自专栏ZKEASOFT

纸壳CMS的插件加载机制

纸壳CMS是基于插件化设计的,可以通过扩展插件来实现不同的功能。如何通过插件来扩展,可以参考这篇文章:

872
来自专栏我和未来有约会

CaseStudy(showcase)布局篇-全屏效果

public Page()         {             InitializeComponent();             App.C...

1836
来自专栏飞扬的花生

ASP.MVC 基于AuthorizeAttribute权限设计案例

     ASP.MVC上实现权限控制的方法很多,比如使用AuthorizeAttribute这个特性 1.创建自定义特性用于权限验证 public clas...

2017
来自专栏码农阿宇

ASP.NET Core MVC中构建Web API

在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能。 在成功构建 ASP.NET CORE MVC项目...

2933
来自专栏菩提树下的杨过

img标签的src=""会引起的Page_Load多次执行

今天看见园子里有人因img的src为空导致session丢失,详情见http://www.cnblogs.com/kyneblog/archive/2009/0...

21010
来自专栏菩提树下的杨过

FckEditor 2.6.4升级手记

说是升级,其实就是把原来的版本替换掉 1.先到www.fckeditor.net上下载fckeditor(html/js包)和fckeditor.net(专用...

2417
来自专栏恰同学骚年

.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)

  关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认识即可。

1033

扫码关注云+社区