• 关于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这样配置。

    八.总结

    输出缓存在实际的应用中还是需要自己去体会。在业务逻辑的处理中才更能体会到缓存的重要性。当然数据缓存也很重要,应用非常广泛,所以还是有必要去掌握。写的不足的地方希望给个评论指点一二。
  • 相关阅读:
    IDEA插件备忘录
    SpringBoot2基础笔记
    EasyCode模板,配合通用mapper,dubbo项目使用
    七牛云存储
    Apache POI
    SSM项目中关于配置的一二三
    SSM整合笔记
    Spring5学习笔记
    ThinkPHP框架,按分类,计算商品价格区间,来完成价格搜索
    PHP常用符号和函数
  • 原文地址:https://www.cnblogs.com/quangeshishen/p/8404823.html
Copyright © 2020-2023  润新知