System.Web.Caching与企业库缓存块

时间:2008-08-22 06:07:29

标签: caching .net-2.0 memcached enterprise-library

对于将在Web应用程序和富客户端应用程序中使用的.NET组件,似乎有两个明显的缓存选项:System.Web.Caching或Ent。库。缓存块。

  • 你用什么?
  • 为什么?

System.Web.Caching

在网络应用之外使用是否安全?我已经看到了混合信息,但我认为答案可能是 - 实际上并非如此。

我不希望使用其中一个亮点SqlCacheDependency,但在.NET 3.5中添加CacheItemUpdateCallback似乎是一件非常好的事情。

Enterprise Library Caching Application Block

  • 其他块已在使用,因此依赖性已存在
  • 缓存持久性不是必需的;在重新启动时重新生成缓存是正常的

某些缓存项应始终可用,但应定期刷新。对于这些项目,在项目被删除后获取回调不是很方便。看起来客户端必须只是睡眠和轮询,直到缓存项重新填充。

Memcached for Win32 + .NET client

当您不需要分布式缓存时,有哪些优缺点?

4 个答案:

答案 0 :(得分:18)

这些是我为缓存主题考虑的项目:

MemCached Win32 速度 .net缓存 企业库缓存应用程序块

MemCached Win32:直到最近,我还使用了MemCached Win32。这类似于Web场(许多服务器为高可用性提供相同的内容),但它是一个缓存场。这意味着如果您没有更大的资源,最初可以在Web服务器上本地安装它。然后,当你走在路上时,你可以水平扩展(更多服务器)或垂直扩展(更多硬件)。这是一个从原始MemCached移植到Windows上的产品。该产品已广泛用于非常高流量的站点。 http://lineofthought.com/tools/memcached

速度:这是微软对MemCached等产品的回答。 MemCached已经出现了很长一段时间,Velocity处于CTP模式。我必须说,从我到目前为止所读到的产品,一旦它出来,这个产品肯定会转过头来。但我不能让自己在没有业绩记录的CTP产品上运行大型生产项目。我已经开始玩它虽然它一旦获得动力MemCached甚至不会比较锁定在windows世界的那些! http://blogs.msdn.com/velocity/

.NET缓存:没有理由对标准.NET缓存进行折扣。它内置并随时可以免费使用,无需(主要)设置。它通过提供在本地存储器,SINGLE状态服务器或集中式数据库中存储项目的机制来提供灵活性。 Velocity步入的地方是当您需要多个状态服务器(内存中的缓存)并且不想使用慢速数据库来保存缓存时。

企业应用程序块:我远离所有企业应用程序块。它们是重型框架,比我通常需要的更多!只要你记得包装那些不是你自己的代码的东西并按照简单的编码规则,坚持使用这个方法的任何其他方法! (当然,我的观点是 - MySpace尽可能地利用企业应用程序块!)

您不必事先选择!我通常创建一个缓存包装器,我在代码中与Get,Set,Exists,Remove,ListKeys等方法进行通信。然后指向可以指向MemCached,Velocity或.NET缓存的基础缓存抽象级别。我使用StructureMap(或选择另一个IoC容器)来注入我想要用于给定环境的哪种形式的缓存。在我的本地开发盒中,我可能会在会话中使用.NET缓存。在制作中我通常使用MemCached Win 32.但不管它是如何设置的,你都可以轻松地交换周围的东西来尝试每个系统,看看什么最适合你。您只需要确保您的应用程序尽可能少地了解缓存内容的方式!一旦这个抽象层到位,你就可以做一些事情,例如为进出缓存的所有数据运行压缩算法(gzip),这样你就可以在缓存中存储10倍的数据量。 - 透明

如果您有兴趣,我会在我的书中介绍.NET Cache,MemCached Win32,StructureMap和相应的抽象!

ASP.NET 3.5社交网络(http://www.amazon.com/ASP-NET-3-5-Social-Networking-Enterprise-ready/dp/1847194788/ref=sr_1_1?ie=UTF8&s=books&qid=1225408005&sr=8-1) Andrew Siemer www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net

<强>更新 更改了使用memcached列出网站的链接。感谢David注意到它被破坏了!

答案 1 :(得分:3)

请记住,EntLib文档专门引导您使用ASP.NET应用程序的ASP.NET缓存。这可能是在这里使用它的最强烈建议。此外,EntLib缓存没有依赖关系,对我来说这是不使用它的一个重要原因。

我不认为将System.Web作为您应用程序的一部分运输存在技术限制,尽管他们已经将这个通知放在.NET 3.5页面上有点奇怪。 Hanselman实际上说他开始被这个概念所淹没,但却开始相信。此外,如果您阅读评论,他说该块有太多的移动部件,ASP.NET缓存更轻 我认为这正是Velocity要解决的问题,但这只是现在的预览:-(

我会说使用Web.Caching并看看你是如何进行的。如果你在它的顶部放置某种抽象层,那么如果你发现问题,你总是可以选择将它替换为EntLib块。

答案 2 :(得分:2)

看看memcached。它是一个非常酷,快速和轻量级的分布式缓存系统。有几种最流行语言的API,包括C#。它可能不适用于客户端(当然除非客户端从某种服务器获取缓存数据),但如果您将memcached的使用抽象到特定接口,则可以使用另一个缓存实现该接口系统

答案 3 :(得分:-2)

@Davide Vosti

“如果他们把它放在网络名称空间中,我认为这是有充分理由的。” 同样的逻辑是否适用于机器人工作室中的并发和协调运行时(CCR)?没有?不这么认为。