zoukankan      html  css  js  c++  java
  • 关于MVC的应用程序缓存和页输出缓存

    转载:  标题: MVC输出缓存(OutputCache参数详解) 原文地址:http://blog.csdn.net/kebi007/article/details/59199115

    现在几乎每个项目中都会有缓存,下面我们就一起来学习下asp.net mvc 缓存           

    一:首先你要知道你为什么要使用缓存

    1.使用缓存的目的就是为提供网站性能,减轻对数据库的压力,提高访问的速度

    2.如果使用缓存不当,比不使用缓存造成的影响更恶劣(缓存数据的更新不及时、缓存过多等)

    3. asp.net MVC 中有两种相应的缓存技术 :1.应用程序缓存 。2.输出缓存

    二:应用程序缓存和输出缓存的区别

    输出缓存:也就是Outputcache 是相对于某个Action或Controller而言。使用的场景包括某个页面的数据更新不是很频繁,不需要每次都从数据库区查询。缓存起来从内存中读取。比如文章详情,排名什么的。
     
    数据缓存:是相对于全局的。任何地方需要调用的时候都可以去调用。使用的场景包括权限管理这种模块的。每个角色对于菜单的访问都是固定的,所以有必要将角色,权限,菜单这种数据做一个全局的数据缓存。修改时再做缓存的更新。

     类似于存储过程中的局部临时表,全局临时表

    应用程序缓存

    应用程序缓存提供了一种编程方式,可通过键/值对将任意数据存储在内存中。使用应用程序缓存与使用应用程序状态类似。但是,与应用程序状态不同的是,应用程序缓存中的数据是易失的,即数据并不是在整个应用程序生命周期中都存储在内存中。使用应用程序缓存的优点是由 ASP.NET 管理缓存,它会在项过期、无效、或内存不足时移除缓存中的项。还可以配置应用程序缓存,以便在移除项时通知应用程序。有关更多信息,请参见缓存应用程序数据

    使用应用程序缓存的模式是,确定在访问某一项时该项是否存在于缓存中,如果存在,则使用。如果该项不存在,则可以重新创建该项,然后将其放回缓存中。这一模式可确保缓存中始终有最新的数据。

    有关更多信息,请参见如何:检索缓存项的值

    页输出缓存

    页输出缓存在内存中存储处理后的 ASP.NET 页的内容。这一机制允许 ASP.NET 向客户端发送页响应,而不必再次经过页处理生命周期。页输出缓存对于那些不经常更改,但需要大量处理才能创建的页特别有用。例如,如果创建大通信量的网页来显示不需要频繁更新的数据,页输出缓存则可以极大地提高该页的性能。可以分别为每个页配置页缓存,也可以在 Web.config 文件中创建缓存配置文件。利用缓存配置文件,只定义一次缓存设置就可以在多个页中使用这些设置。

    页输出缓存提供了两种页缓存模型:整页缓存和部分页缓存。整页缓存允许将页的全部内容保存在内存中,并用于完成客户端请求。部分页缓存允许缓存页的部分内容,其他部分则为动态内容。有关更多信息,请参见缓存 ASP.NET 页

    部分页缓存可采用两种工作方式:控件缓存和缓存后替换。控件缓存有时也称为分段缓存,这种方式允许将信息包含在一个用户控件内,然后将该用户控件标记为可缓存的,以此来缓存页输出的部分内容。这一方式可缓存页中的特定内容,并不缓存整个页,因此每次都需重新创建整个页。例如,如果要创建一个显示大量动态内容(如股票信息)的页,其中有些部分为静态内容(如每周总结),这时可以将静态部分放在用户控件中,并允许缓存这些内容。

    缓存后替换与控件缓存正好相反。这种方式缓存整个页,但页中的各段都是动态的。例如,如果要创建一个在规定时间段内为静态的页,则可以将整个页设置为进行缓存。如果向页添加一个显示用户名的 Label 控件,则对于每次页刷新和每个用户而言,Label 的内容都将保持不变,始终显示缓存该页之前请求该页的用户的姓名。但是,使用缓存后替换机制,可以将页配置为进行缓存,但将页的个别部分标记为不可缓存。在此情况下,可以向不可缓存部分添加 Label 控件,这样将为每个用户和每次页请求动态创建这些控件。有关更多信息,请参见缓存 ASP.NET 页的某些部分

    三:如何使用

     输出缓存的使用方法是在Controller 或Action上打[OutPutCache]特性即可。我这里以Action为示例

     

    四.输出缓存CacheProfile使用配置文件设置缓

    五.输出缓存CacheProfile使用配置文件设置缓

    这种方式便于统一配置,当然也可以设置参数duration、location 、varybyparam等。我们需要在system.web 节点下加入这些

    六.输出缓存VarByCustom参数的使用

    输出缓存中VarBuCustome参数的主要作用是根据数据改变让客户端缓存过期并及时更新。
    主要用于自定义输出缓存要求的任意文本。如果赋值该属性值是browser,缓存将随浏览器名称和主要版本信息的不同而异。如果输入了自定义的字符串,则必须在应用程序的Global.asax文件中重写 Httpapplication GetVaryByCustomString方法。

    通过观察实现的效果很明显:在缓存持续的时间内,type参数值没有改变时 status Code 还是304 ,参数值发生改变时则是200重新生成页面了。
    从这个即时更新的缓存来说已经达到要求了,当然这从业务上来说还是不够的。
    可以得出的缓存结果,整个更新缓存的机制是 发现参数值不同便重新生成视图,就可以做到缓存的更新
     
    七.输出缓存SqlDependency的使用

    首先我们还是来学习一下如何启用数据库缓存依赖项。

    运行cmd命令: cd C:\Windows\Microsoft.NET\Framework\v4.0.30319

     运行相关命令: aspnet_regsql -S .  -U sa -P 123456  -ed -d 数据库名 -et -t 表名

    解释一下

    注册:aspnet_regsql -S . -E -ed -d 数据库名 -et -t 表名
    删除:aspnet_regsql -S . -E -d 数据库名 -dt -t 表名
    取消数据库缓存依赖: aspnet_regsql -S . -E -dd 数据库名数据库名 
    列出已注册表:aspnet_regsql -S . -E -d 数据库名 -lt
    如图:

    现在我们已经开启数据库的缓存依赖,我们继续在webconfig这样配置。

    八.总结

    输出缓存在实际的应用中还是需要自己去体会。在业务逻辑的处理中才更能体会到缓存的重要性。当然数据缓存也很重要,应用非常广泛,所以还是有必要去掌握。写的不足的地方希望给个评论指点一二。
  • 相关阅读:
    Oracle中有大量的sniped会话
    Error 1130: Host '127.0.0.1' is not allowed to connect to this MySQL server
    汉字转换为拼音以及缩写(javascript)
    高效率随机删除数据(不重复)
    vs2010 舒服背景 优雅字体 配置
    mvc中的ViewData用到webfrom中去
    jquery ajax return值 没有返回 的解决方法
    zShowBox (图片放大展示jquery版 兼容性好)
    动感效果的TAB选项卡 jquery 插件
    loading 加载提示······
  • 原文地址:https://www.cnblogs.com/quangeshishen/p/8404823.html
Copyright © 2011-2022 走看看