首页 / 知识

关于.net 2.0:System.Web.Caching与企业库缓存块

2023-04-12 20:46:00

关于.net 2.0:System.Web.Caching与企业库缓存块

System.Web.Caching vs. Enterprise Library Caching Block

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

  • 你用什么?
  • 为什么?

System.Web.Caching

在Web应用程序外部使用安全吗?我已经看到了混合的信息,但我认为答案可能不是真的。

  • KB文章警告,禁止1.0和1.1非Web应用程序使用
  • 2.0页上有一条注释,指出它可以:http://msdn.microsoft.com/zh-cn/library/system.web.caching.cache(VS.80).aspx
  • 斯科特·汉瑟曼(Scott Hanselman)被这个想法吓到了
  • 3.5页包含禁止此类使用的警告
  • Rob Howard鼓励在Web应用程序之外使用

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

企业库缓存应用程序块

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

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

Win32 + .NET客户端的Memcached

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


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

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

MemCached Win32:直到最近我都使用过MemCached Win32。这类似于Web场(许多服务器提供相同内容以实现高可用性),但是它是缓存场。这意味着,如果没有足够的资源,可以最初将其本地安装在Web服务器上。然后,当您沿着道路行驶时,可以水平扩展(更多服务器)或垂直扩展(更多硬件)。这是从原始MemCached移植到Windows的产品。该产品已在交通非常繁忙的地点广泛使用。 http://lineofthought.com/tools/memcached

速度:这是Microsoft对诸如MemCached之类的产品的回答。 MemCached已退出一段时间,Velocity处于CTP模式。我必须说,到目前为止,从阅读的内容来看,这款产品肯定会打动我的头。但是我无法让自己在零记录的CTP产品上运行大型生产项目。我已经开始使用它了,尽管它一度获得了发展,但MemCached甚至无法与锁定在Windows世界中的用户进行比较! http://blogs.msdn.com/velocity/

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

企业应用程序块:我远离所有企业应用程序块。它们是沉重的框架,可以提供比我通常所需的更多的东西!只要您记得包装所有涉及非您自己的代码的内容并遵循简单的编码规则,就可以坚持使用该方法中的任何其他方法! (当然,这只是我的意见-MySpace在企业应用程序块中发挥了最大的作用!)

您不必预先选择!我通常会在我的代码中为诸如Get,Set,Exists,Remove,ListKeys等方法创建一个与之通信的缓存包装器。然后,该缓存包装器指向可能指向MemCached,Velocity或.NET的基本缓存抽象级别。缓存。我使用StructureMap(或选择另一个IoC容器)注入要在给定环境中使用的高速缓存形式。在我的本地开发框中,我可能在会话中使用.NET缓存。在生产环境中,我通常使用MemCached Win32。但是,无论如何设置,您都可以轻松地交换内容来尝试每个系统,以查看最适合您的系统。您只需要确保您的应用程序对事物的缓存方式了解得越少越好!一旦建立了这一抽象层,您就可以执行诸如对所有进出缓存的数据运行压缩算法(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注意到它已损坏!


请记住,EntLib文档专门将您引向ASP.NET应用程序的ASP.NET缓存。这可能是在这里使用它的最强建议。另外,EntLib缓存不具有依赖项,对我来说,这是不使用依赖项的重要原因。

我不认为将System.Web作为应用程序的一部分存在技术上的限制,尽管他们将通知放在.NET 3.5页面上有点奇怪。汉瑟曼实际上说他最初是被这个观念所迷惑,但是被说服了。另外,如果您阅读注释,他说该块包含太多活动部件,并且ASP.NET Cache更轻巧。
我认为这正是Velocity要解决的问题,但这只是目前的预览:-(

我会说使用Web.Caching并看看您如何进行。如果您在其顶部放置某种抽象层,则始终可以选择在以后发现问题时将其替换为EntLib块。


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


@戴维·沃斯蒂

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


缓存应用程序客户端组件

最新内容

相关内容

热门文章

推荐文章

标签云

猜你喜欢