对于将在web应用程序和富客户端应用程序中使用的.NET组件,似乎有两个明显的缓存选项: System.Web.Caching或Ent。利布。缓存块。
System.Web.Caching
这在网络应用程序之外使用安全吗?我看到了复杂的信息,但我认为答案可能是-某种-不-不-真的。
我不希望使用它的亮点之一SqlCacheDependency,但是在.NET 3.5中添加CacheItemUpdateCallback似乎是一件非常好的事情。
企业库缓存应用程序块
某些缓存项应始终可用,但应定期刷新。对于这些项,在删除项之后获得回调并不是很方便。看起来,客户端只能睡觉和轮询,直到重新填充缓存项。
Memcached for Win32 + .NET客户端
当您不需要分布式缓存时,有哪些优点和缺点?
发布于 2009-06-11 22:21:21
以下是我在缓存主题中考虑的内容:
MemCached Win32 .net缓存企业库缓存应用程序块
MemCached Win32 :直到最近,我一直使用MemCached Win32。这类似于一个web场(许多服务器为高可用性提供相同的内容),但它是一个缓存场。这意味着,如果您没有更大的资源,那么您可以在本地安装它。然后,当你沿着这条路前进的时候,你可以水平地缩放(更多的服务器)或垂直的(更多的硬件)。这是一个从最初的MemCached移植到Windows上的产品。该产品已广泛应用于非常高的交通站点。http://lineofthought.com/tools/memcached
速度:--这是Microsofts对MemCached等产品的回答。MemCached已经推出了相当一段时间,速度是在CTP模式。我必须说,根据我到目前为止所读到的,这款产品一旦推出,我肯定会回心转意。但我不能让自己在一个零记录的CTP产品上运行大型生产项目。我已经开始玩它了,但一旦它获得动力,MemCached甚至无法与那些锁在窗口世界中的人相比!http://blogs.msdn.com/velocity/
.NET缓存:没有理由对标准的.NET缓存进行折扣。它是内置和准备免费使用,没有(主要)设置的要求。它通过提供将项存储在本地内存、单个状态服务器或集中式数据库中的机制提供了灵活性。当您需要一个以上的状态服务器(内存中的缓存),并且不想使用一个缓慢的数据库来保存您的缓存时,速度就会进入其中。
企业应用程序块:--我远离所有企业应用程序块。他们是沉重的框架,给出的比我一般要求的更多!只要您记得包装所有与您无关的代码,并遵循简单的编码规则,那么请坚持使用其他方法。(当然,这只是我的观点-- MySpace尽可能多地利用企业应用程序块之外的功能!)
--您不必预先选择!--我通常在代码中创建一个缓存包装器,用于方法(如Get、Set、etc、Remove、ListKeys等)进行通信。这就指向了缓存抽象的底层,它可以指向MemCached、MemCached或.NET缓存。我使用StructureMap (或选择另一个IoC容器)注入给定环境中要使用的缓存形式。在本地开发框中,我可以在会话中使用.NET缓存。在生产中,我通常使用MemCached Win 32。但是不管它是如何设置的,您都可以轻松地交换东西,尝试一下每个系统,看看什么最适合您。您只需要确保您的应用程序知道的东西如何缓存尽可能少!一旦这个抽象层到位,您就可以对所有进出缓存的数据运行压缩算法(gzip),这将允许您在缓存中存储10倍的数据量。- transparently.
如果您感兴趣,我将在我的书中介绍.NET缓存、MemCached Win32、StructureMap和适当的摘要!
ASP.NET 3.5社交网络(1?ie=UTF8 8&s=book&qid=1225408005&sr=8-1 ) Andrew www.andrewsiemer.com blog.andrewsiemer.com www.socialnetworkingin.net
Update更改了使用memcached列出站点的链接。谢谢大卫注意到它坏了!
发布于 2008-08-22 09:37:44
请记住,EntLib文档特别引导您使用ASP.NET应用程序的ASP.NET缓存。这可能是在这里使用它的最强烈的建议。此外,EntLib缓存没有依赖项,这对我来说是不使用它的一个重要原因。
我认为在将System.Web作为应用程序的一部分发布方面没有技术上的限制,尽管他们在.NET 3.5页上发布这个通知有点奇怪。汉瑟尔曼实际上说,他一开始就被这种想法吓到了,但后来被说服了。另外,如果你读到这些评论,他说这个块有太多的移动部分,而且ASP.NET缓存更轻盈。
我认为这正是速度将要解决的问题,但现在这只是一个预览:-(
我想说的是,使用Web.Caching,看看你的进展如何。如果您在它的顶部添加了某种抽象层,那么如果您发现问题,您总是可以选择稍后将它替换为EntLib块。
发布于 2008-08-22 06:21:15
看看梅卡奇。它是一个非常酷,快速和轻量级的分布式缓存系统。有几种最流行的语言的API,包括C#。它可能不能很好地服务于客户端(当然,除非客户机从某种服务器获取缓存数据),但如果将memcached的使用抽象到特定的接口,则可以使用另一个缓存系统实现该接口。
https://stackoverflow.com/questions/21870
复制相似问题