首页 > 编程语言 >ASP.NET 4 AppFabric 输出缓存提供程序

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

时间:2022-10-24 16:07:54浏览次数:76  
标签:缓存 AppFabric 会话 ASP 使用 NET

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

缓存是用来保存你数据的地方,从而使你的应用程序访问更快速。缓存可以根据你的需要分配到许多台机器上,而开发人员无需关心数据究竟在哪台机器上。为了获得超快的性能,你甚至可以牺牲数据一致性,将缓存复制到调用客户端(本地缓存)。所保存的数据可以是任何可被序列化的.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的使用,请参考​​ScottGU​​​的​​VS 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提供器被缓存和保存起来:

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

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

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

标签:缓存,AppFabric,会话,ASP,使用,NET
From: https://blog.51cto.com/shanyou/5790048

相关文章

  • Windows Server AppFabric Caching
    这套AppFabricCaching比我用过的memcached复杂多了,MSDN有一篇文章进行介绍IntroductiontoCachingwithWindowsServerA...这套AppFabric......
  • "Ascend.Net" Windows Forms Controls
    在微软的开源网站上http://www.codeplex.com有一个WinformControl项目Ascend.NET,非常不错.做Winform程序的兄弟可以关注一下.在微软的开源网站上......
  • Netty进阶-黏包半包分析
    Netty进阶1、黏包服务端//测试黏包服务端@Slf4jpublicclassTestNianbaoServer{publicstaticvoidmain(String[]args){NioEventLoopGroupboss=......
  • Netty进阶-黏包半包解决方案
    4、解决方案4.1、短连接以解决黏包为例。服务端同上,客户端如下//短连接处理黏包,发送后关闭publicclassTestSloveNianbaoClient{publicstaticvoidmain(Strin......
  • Netty进阶-协议
    5.1、Redis协议//redis协议测试publicclassTestRedis{publicstaticvoidmain(String[]args){finalbyte[]line={13,10};NioEventLoop......
  • Netty入门-ButeBuf
    3.5、ByteBuf3.5.1、创建//结果:初始容量256,扩容到512//PooledUnsafeDirectByteBuf(ridx:0,widx:0,cap:256)//PooledUnsafeDirectByteBuf(ridx:0,widx:300,cap......
  • Netty入门-Future & Promise
    3.3、Future&PromiseNetty中的Future与Jdk中Future同名,但是是两个接口,继承关系:Promise---extends-->Future(Netty)-----extend--->Future(JDK)区别:jdkFuture只能......
  • Netty入门-Handler & Pipeline
    3.4、Handler&PipelineChannelHandler用来处理Channel上的各种事件,分为入站、出站两种。所有ChannelHandler被连成一串,就是Pipeline入站处理器通常是ChannelIn......
  • Netty入门-Hello World
    Netty入门1、Netty优势NettyVSNIO,工作量大,bug多需要自己构建协议解决TCP传输问题,如黏包,半包epoll空轮询导致cpu100%对API进行增强,ThreadLocal-->FastThreadLocal......
  • danet(弹额头表情包动漫gif)
    dragon是什么意思globaldragonDanetisCEOofglobaldesignandbrandingfirmdragonrouge,headquarteredinParis.达内特是总部位于巴黎的全球设计和品牌咨询公司卓......