专栏首页张善友的专栏ASP.NET 4 AppFabric 输出缓存提供程序

ASP.NET 4 AppFabric 输出缓存提供程序

缓存是用来保存你数据的地方,从而使你的应用程序访问更快速。缓存可以根据你的需要分配到许多台机器上,而开发人员无需关心数据究竟在哪台机器上。为了获得超快的性能,你甚至可以牺牲数据一致性,将缓存复制到调用客户端(本地缓存)。所保存的数据可以是任何可被序列化的.NET对象。

使用缓存的目的是让你的应用程序的性能和扩展性更好。AppFabric支持显式和隐式两种缓存使用方式来提升扩展性和性能。如果你是一名ASP.NET的开发人员,隐式和显式缓存使用方式对你来说应该相当熟悉。显式缓存使用方式让你能通过AppFabric提供的缓存API,用编程的方式添加、删除并管理缓存中的数据项。这是一个非常强大的工具来帮助你定制应用程序数据的缓存策略及使用模式,不过你需要对数据缓存的原则有一定的理解。隐式缓存使用方式利用了默认的缓存策略,能在常用的场景中发挥作用。隐式缓存使用的两个例子包括ASP.NET会话状态和HTML页面缓存(即输出缓存)。

借助 ASP.NET 提供程序模型,开发人员可以从三种会话提供程序中进行选择:InProc、StateServer 和 SQLServer。使用 AppFabric 缓存时,第四个会话提供程序在技术上是可行的,但是应当小心不要将会话与缓存混淆。缓存用于提高性能,会话用于使应用程序达到一定的状态。

用于 ASP.NET 的 AppFabric 缓存会话提供程序使用其分布式缓存(可能具有高可用性)作为 ASP.NET 会话的存储库。这一功能是透明的,且无需修改现有的代码就可以使用。有了这样的提供程序,ASP.NET 会话就可以在 Web 服务器崩溃或脱机的情况下保持可用,这是因为会话是存储在 AppFabric 缓存中的。

ASP.NET 4.0中对它进行了重新设计,提供了一个OutputCacheProvider供开发人员进行扩展,但是它默认情况下,仍然使用System.Web.Caching.Cache来做做缓存。关于ASP.NET 4.0的Output Cache的使用,请参考ScottGUVS 2010 和 .NET 4.0 系列之《ASP.NET 4中的可扩展输出缓存》篇

ASP.NET开发团队在codeplex上发布了ASP.NET 4 Providers for AppFabric Caching,里面有两个提供者ASP.NET会话状态和HTML页面缓存(即输出缓存):

  • Session state: Microsoft.Web.DistributedCacheSessionStateStore
  • Output caching: Microsoft.Web.DistributedOutputCache

目前这两个提供者没有正式发布,只是发布在社区中进行测试和反馈,不能直接在生产环境中使用。不过AppFabric 已经带了一个ASP.NET Session State Provider (Windows Server AppFabric Caching),具体参考http://msdn.microsoft.com/en-us/library/ee790859.aspx

使用方法如下:

1、在Asp.Net 4.0 的web.config文件中添加了关于缓存的配置节,如下所示

<caching> 
     <outputCache defaultProvider="AppFabricOutputCache"> 
        <providers> 
         <add name="AppFabricOutputCache" type="Microsoft.Web.DistributedOutputCache, Microsoft.Web.DistributedCache" hostName="localhost" cachePort="22233" cacheName="session"/> 
       </providers> 
     </outputCache> 
   </caching> 

2、使用Microsoft.Web.DistributedOutputCache

1)在配置文件中做配置,将自定义的实现作为默认输出缓存支持,请看1的配置 2)在UserControl中指定使用Provider的名字,改名字在web.config中定义,例如

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="IamUserControl.ascx.cs" Inherits="OutputCacheTest.IamUserControl" %>

<%@ OutputCache Duration="3000" ProviderName="AspNetInternalProvider" VaryByParam="None" %>

需要注意的是,只能在UserControl中指定Provider的名字,在Page的声明中是不允许的,在Page中默认情况会使用web.config中配置的defaultProvider,但是我们可以通过3)中介绍的方法给不同的页面使用不同的OutputCacheProvider实现。

同样地,如果我将[OutputCache]特性加到某个ASP.NET MVC控制器的任意一个action方法上时,内容也会通过使用我的ScottOutputCache提供器被缓存和保存起来:

3)你可以通过覆盖应用的Global.asax文件中的 GetOutputCacheProviderName() 方法,在每个请求的基础上,动态指定使用哪个输出缓存提供器。在下面,我表明,对我应用中的 “Home.aspx”网页我想要使用内置的,用内存的ASP.NET输出缓存提供器,然后对所有其他的请求,我想要使用注册在web.config文件中的提供器:在Global.asax文件中重写GetOutputCacheProviderName(HttpContext context)方法,根据context返回不同的实现名字,如下例子

Asp.Net 4.0 新特性之 使用自定义OutputCache Provider

VS2010] ASP.NET 4.0 新功能:自訂輸出快取 (Output Cache) 提供者

在 ASP.NET 中构建和使用自定义的 OutputCache 提供程序

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 替换EnterPrise Library 4.0 缓存应用程序块的CacheManager

    缓存是用来提高应用程序性能的常见技术,其实现方式是将常用数据从慢数据源复制到更快的数据源。对于数据驱动的应用程序来说,该技术通常需要将从数据库或 Web 服务检...

    张善友
  • ASP.NET开发人员需要学习ASP.NET MVC么?

    InfoQ上有篇文章ASP.NET开发人员需要学习ASP.NET MVC么? 文章已经覆盖了绝大多数对于学习/使用ASP.NET MVC的观点。 我觉得ASP....

    张善友
  • ASP.NET MVC 1.0发布

    Microsoft已经发布了ASP.NET Model-View-Controller (MVC) web框架1.0版,这是微软采用开源协议发布,并且同开发社区...

    张善友
  • okhttp3.4.1+retrofit2.1.0实现离线缓存的示例

    关于Retrofit+OkHttp的强大这里就不多说了,还没了解的同学可以自行去百度。这篇文章主要讲如何利用Retrofit+OkHttp来实现一个较为简单的缓...

    砸漏
  • 构建高性能服务器 -- 缓存篇

    说到缓存,相信大家都不陌生。缓存的目的都在于避免重复的慢速计算,比如数据库访问。相对于慢速计算,缓存将会大大提高数据存取的速率,当然同时将会缩短用户每次请求处理...

    jiezhu
  • Mybaitis 缓存的优化

    这段代码中, Mybatis一共发了两条SQL,这就好像说, Mybatis中没有缓存,然后我们打开Mybatis的文档一看,顿时震惊

    程序猿DD
  • Spring Boot2(二):使用Spring Boot2集成Mybatis缓存机制

    学习SpringBoot集成Mybatis的第二章,了解到Mybatis自带的缓存机制,在部署的时候踩过了一些坑。在此记录和分享一下Mybatis的缓存作用。

    鸟不拉屎
  • 后端技能清单(草稿)

    昨天也顺手整理了一下我所需要的后端技能清单。不过,由于我离非常有经验的后端开发者有点距离,希望大家可以给点意见哈。 入门 HTML / CSS 编程语言:Ja...

    Phodal
  • 可伸缩系统的架构经验

    最近,阅读了Will Larson的文章Introduction to Architecting System for Scale,感觉很有价值。作者分享了他在...

    张逸
  • 使用redis做缓存

    用户2146856

扫码关注云+社区

领取腾讯云代金券