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

  • 你用什么?
  • 为什么?

System.Web.Caching

在Web应用程序之外使用是否安全? 我看到了混合信息,但我认为答案可能并非如此。

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

企业库缓存应用程序块

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

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

Memcached for Win32 + .NET客户端

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

===============>>#1 票数:18 已采纳

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

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

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

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

.NET Cache:没有理由对标准.NET Cache进行折扣。 它内置并随时可以免费使用,无需(主要)设置。 它通过提供在本地存储器,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列出站点的链接。 感谢大卫注意到它被打破了!

===============>>#2 票数:3

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

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

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

===============>>#3 票数:2

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

===============>>#4 票数:-2

@Davide Vosti

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

  ask by ESV translate from so

未解决问题?本站智能推荐:

1回复

企业库缓存的对象大小

我已经使用Perfmon设置了企业库缓存计数器。 但是,我只能看到缓存中的条目数。 如果有办法找出缓存对象的大小,以便可以为要缓存和删除的最大项目数指定正确的值,请有人帮我吗? 另外,虽然我的Web应用程序按预期运行,但我看到安静的大量未命中内容时,Missed Caches的真正
1回复

禁用企业库缓存应用程序块

我们使用企业库缓存应用程序块在我们的Web服务中进行缓存(在内存中)。 工作很好,没有抱怨。 我们开始做一些负载测试,并且我被要求禁用缓存,这样我们就可以了解缓存给我们带来什么样的性能增益。 我认为这很简单 - 事实证明并非如此。 我找不到任何配置设置来禁用缓存。 我想我可以拒
1回复

监视企业库缓存

我想监视应用程序在企业库缓存机制中存储的键名和值。 我们正在使用内存设置。 基本上,我只需要弄清楚如何转储当前存储的密钥。 我看到ICacheManager返回了一个带有计数器的对象,但是除非您已经知道密钥,否则似乎没有一种访问缓存项的方法。 有想法吗?
6回复

Microsoft企业库缓存应用程序块不是线程安全的?

我创建了一个超级简单的控制台应用程序来测试企业库缓存应用程序块,行为令人困惑。 我希望我搞砸了一些容易在设置中修复的东西。 为了测试目的,我让每个项目在5秒后过期。 基本设置 - “每秒选择0到2之间的数字。如果缓存还没有它,请将其放在那里 - 否则只需从缓存中获取它。在LOCK语句中
1回复

企业库5.0缓存块和Oracle作为数据库缓存存储

我们正在尝试看看是否有可能将Oracle用作数据库缓存存储。 有没有人遇到这种情况? 谢谢,Bhaskar
1回复

如何阻止企业库缓存块持久保存对从其中检索的数据的更改?

您在想什么措辞尴尬的问题? 当我的应用程序加载时,它会进入数据库并获取几个不同的查找表,这些数据值得价值,并为每个表创建.NET列表并将其放入缓存中。 例如,“状态”。 此时列出:开,关 当我从缓存中检索状态列表时,我将另一个项目添加到列表中,“选择一个”并将其设置为Comb
1回复

没有配置文件的企业库缓存配置

我正在使用没有配置文件的企业库缓存块。 缓存设置从我的代码初始化。 我使用以下代码初始化缓存: 问题是,在检索应该过期的缓存项时,未考虑expirationPollFrequencyInSeconds (此处为2秒)。 该项目在缓存中的停留时间超过2秒。 任何想法 ? 请参
1回复

关于CacheManager的C#企业库缓存性能

在性能视图中使用缓存库的最佳方法是什么。 我的数据库表中有很多要缓存的数据。 可以说我有3个表命名。 分配头 作业行 物品 今天,iam将表存储为休假: 我有一个CacheManger,我存储这样的数据。 当检索像Heads这样的数据时,
2回复

隔离存储中的企业库缓存可通过不同应用访问

美好的一天。 我想知道IIS中的多个应用程序是否可以访问使用隔离存储(磁盘而不是DB)的企业库缓存? 也就是说,它们可以共享同一个实例吗? 我在一台计算机上运行各种WCF服务,并在不同的Web应用程序中(如果有区别的话,可能在不同的应用程序池中)进行设置。 他们都需要访问共享缓存
1回复

企业库缓存-从外部进程中删除对象(控制台应用程序)

我们正在考虑在asp.net 3.5应用程序中使用企业库缓存框架来存储最受欢迎产品的小型数据表。 如果需要,是否可以编写外部过程(例如控制台应用程序)以删除这些数据表? 例如,客户可以进入并更新产品的数据,这将使存储在缓存中的数据表过期。 发生这种情况时,我希望外部应用程序进入缓存并使