关于颗粒度更细小的缓存-“部分视图缓存”
引言
之前学习了一点关于缓存的东西,有控制器缓存、页面缓存,又看到一篇文章是关于部分视图缓存的内容。一下就是我的一些学习总结。
情景
假设有一个页面A,这是一个静态页面除了头条的轮播图需要更新。那么这个时候可以把整个页面缓存,然后轮播图那一块用Html.Partial显示。
首先页面缓存设置为一个小时
然后页面显示输出时间
具体效果如上,在60分钟内刷新时间都是不会改动的。这个时候整个页面就是缓存60分钟。
部分视图缓存
将Index页面的缓存过滤器移除。新增一个Html的拓展项:
public static class CacheExtensions { public static string Cache(this HtmlHelper htmlHelper,string cacheKey,CacheDependency cacheDependencies,DateTime absoluteExpiration,TimeSpan slidingExpiration,Func<object> func) { var cache = htmlHelper.ViewContext.HttpContext.Cache; var content = cache.Get(cacheKey) as string; if (content == null) { content = func().ToString(); //SqlCacheDependency sqldependency = new SqlCacheDependency(); //SqlCacheDependency.CreateOutputCacheDependency("UserCacheDependency:UnionInf")这个就是之前写在webconfig里面的配置数据 var path = System.AppDomain.CurrentDomain.BaseDirectory; cache.Insert(cacheKey, content,new CacheDependency(path+"/Exam/Name.txt") , absoluteExpiration, slidingExpiration); } return content; } }
现在是依赖与当前目录下的Name.txt文件,即如果文件被改动缓存就会失效。如果要用Sql依赖则可以使用上述备注的内容。
然后页面代码修改如下:
最终的效果如下:
原文链接:http://www.cnblogs.com/JeffreyZhao/archive/2009/09/17/aspnet-mvc-fragment-cache-1.html