使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面
2024-08-27 10:53:35
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);
}
最新文章
- Gephi可视化(二)——Gephi Toolkit叫板Prefuse
- MOOCULUS微积分-2: 数列与级数学习笔记 3. Convergence tests
- iOS.StaticLibrary.1-avoid-duplicate-symbol-in-static-library[draft]
- PHP 错误与异常 笔记与总结(7)将错误日志以邮件方式发送
- BZOJ 1565 植物大战僵尸(最大权闭合图)
- textarea还剩余字数统计
- java使用POI jar包读写xls文件
- [转]NHibernate之旅(12):初探延迟加载机制
- css多行文本居中
- 卷积神经网络经验-CS231n笔记
- 常见的VPS虚拟化架构:OpenVZ、Xen、Hyper-V、KVM、VMWare OpenVZ
- 高通HAL层之bmp18x.cpp
- B+索引、Hash索引、数据类型长度
- 一次完败的Release
- sqoop将mysql数据导入hbase、hive的常见异常处理
- 调试器GDB的基本使用方法
- ionic3 打包Xcode 9 Swift Language Version (SWIFT_VERSION) Ask 报错
- 作业2:git使用
- IA64与x64的区别
- 洛谷1894 [USACO4.2]完美的牛栏The Perfect Stall
热门文章
- LintCode ";Sliding Window Median"; &; ";Data Stream Median";
- 错误:javax.servlet.jsp.PageContext can not be to a type
- bzoj1760 [Baltic2009]Triangulation
- Nginx做反向代理总是被系统kill
- KB975517 ";The update does not apply to your system";
- 让 SVN (TortoiseSVN)提交时忽略bin和obj目录
- Scala控制抽象
- 最大公约数Greatest Common Divisor(GCD)
- Linux 下绑定域名与IP地址
- C++学习5