温莎拦截器AOP和缓存

时间:2020-03-06 14:22:22  来源:igfitidea点击:

我正在考虑使用温莎城堡的拦截器来缓存数据,以帮助扩展asp.net网站。

是否有人对此有任何想法/经验?

次要澄清:
我的意图是使用Windsor拦截"昂贵"的调用并委托给MemCacheD或者Velocity(或者另一个分布式缓存)进行缓存。

解决方案

温莎很棒,但是当我们有几种内置的数据缓存方式时,为什么要使用它进行缓存。温莎在其他领域有其基础,不一定要缓存。从缓存对象到会话再到cookie。有很多缓存方法。更重要的是,在大型应用程序中,我们最终需要分布式缓存。 MS正在为该产品开发产品,并且有一些很好的供应商在市场上出售产品。

我来看一下Microsoft Velocity。如果我们计划创建企业应用程序,那么这可能是一个很好的解决方案

我们如何实现数据访问?如果我们使用NHibernate,我建议在这里进行缓存。 NHibernate带有用于.NET内置缓存,memcached(通过NMemcachD)和Velocity的缓存策略。我已经将memcached广泛用于企业级应用程序,并且没有任何问题。

基于拦截器的缓存机制是一个有趣的想法,我以前从未想到过。透明地应用很容易。我认为我喜欢使用Castle的AOP功能的原因是因为它基于代理,因此我们不必使用属性来污染代码。

我一直在使用Windsor的缓存装饰器(而不是拦截器),它们工作得很好。

拦截器也对此有好处,例如,请参见此示例。

嘿,根据本文,我们使用了温莎城堡拦截器:http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx以及上面提到的一个。

我发现整个过程非常简单,这是进行AOP的一种非常优雅的方法。然而....

不过要小心性能。使用拦截会创建动态代理,这肯定会减慢速度。根据我们使用500节点计算场的基准测试,我们发现在Windsor中使用拦截后性能下降了约30%,这也超出了我们在拦截内所做的工作(基本上是将方法调用和参数记录到方法中) 。并只需删除拦截即可使整个应用加速。

小心,我们不要让昂贵的电话真正变得昂贵。 :)如果我是我们,则可能希望实现不同级别的缓存,方法可能是实施IRepository类型模式,然后在适当的时候使用各种缓存策略进行支持。

祝你好运,

--
马特