关于颗粒度更细小的缓存-“部分视图缓存”

引言

  之前学习了一点关于缓存的东西,有控制器缓存、页面缓存,又看到一篇文章是关于部分视图缓存的内容。一下就是我的一些学习总结。

情景

  假设有一个页面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

原文地址:https://www.cnblogs.com/moshanghuakai/p/7160518.html