源栈培训:ASP.NET MVC:Cache

更多
2020年02月14日 13点20分 作者:叶飞 修改

和 源栈培训:ASP.NET Core:缓存 的区别:


MVC     RazorPage
过期时间设置 Slide和Abosulte可共存
Slide和Abosulte可以共存
清理机制
ASP.NET自动调节清理 开发人员设置
API调用
HttpContext.Cache
依赖注入IMemoryCache对象
特性配置整页缓存 [OutputCache] 
[ResponseCache]
部分页缓存 ChildAction上添加[OutputCache] 
TagHelper <cache></cache>



可编程API

在MVC中,Cache使用“键值对”的形式存储,可以很方便的进行增删改查,^_^

        public object Add(
            string key, object value, //键值对
            CacheDependency dependencies, //主要适用于文件,当文件发生变动时,删除当前缓存
            DateTime absoluteExpiration, 
            TimeSpan slidingExpiration, 
            CacheItemPriority priority, //优先级
            CacheItemRemovedCallback onRemoveCallback);//当缓存被删除时调用

Cache是全局的:建议使用{Controller}-{Action}-{Parameters}的形式构建cache key值,以免重复冲突


Output Cache

有意思:OutputCache实际上继承自ActionFilterAttribute!

注意:如果缓存被击中(生效),MVC会直接将之前缓存的HTML文件/片段返回给客户端,不会再运行Action和View中的代码(演示:略)

OutputCache的常用属性:

  • Duration:缓存多久
  • VaryByParam:根据Action的参数缓存不同的“副本”
    1. none:不考虑参数,所有参数使用同一个缓存版本
    2. *:考虑所有参数,只要有任何一个参数值不同,都生成一个新的缓存副本
    3. 参数名,比如:"id";多个参数用分号(;)分隔"id;name":按指定的参数缓存副本
  • CacheProfile://TODO:讲web.config配置后……
  • 其他……

ChildAction也可以声明OutputCache,缓存部分页面。

注意理解:Action和ChildAction都缓存时的情景……


但MVC无法解决整个页面缓存其中部分页面不缓存的情况!所以我们需要引入:


Donut Caching

添加引用,建议使用nuget

当不要缓存其中某一个ChildAction,简单添加一个参数:true

@Html.Action("Login", "Account", true)

了解:自定义的Html Helper的用法

也可以在ChildAction上使用:

[DonutOutputCache(CacheProfile = "FiveMins")]
在低版本的MVC(至少MVC3以前)时,ChildAction不能使用CacheProfile,donut同时弥补了这个缺陷


源栈培训 ASP.NET MVC Cache
赞: 0 踩: 0

打赏
已收到打赏的 帮帮币

你的 打赏 非常重要!
为了保证文章的质量,每一篇文章的发布,都已经消耗了作者 1 枚 帮帮币
没有“帮帮币”,作者无法发布新的文章。

全系列阅读
评论 / 0

ASP.NET


RazorPage

微软推荐的、最新的、基于Razor页面和.NET core的新一代Web项目开发技术,包括Razor Tag Helper、Model绑定和Validation、Session/Cookie、内置依赖注入等……

MVC

过去两年间最流行的、基于.NET Framework和MVC模式的ASP.NET MVC框架,主要用于讲解安全、性能、架构和各种实战功能演示……

其他Web项目

包括WebForm和WebApi

全部
关键字



帮助

反馈