多个Web服务器之间是否可以共享System.Runtime.Caching缓存对象?

5
2个回答

8

HttpRuntime.Cache在进程内运行(即在服务器内存中)并且不能在多个web服务器之间共享。您可以使用自定义提供程序扩展System.Runtime.Caching,使用诸如SQL Server或专用服务器等平台来集中缓存。

推荐的多web服务器缓存策略肯定取决于环境。

在较低的端口,使用SQL Server是一种快速选择,可能对.NET开发人员来说很熟悉。另一个选择是使用Web服务(例如WCF)来集中缓存数据调用。

在更高的端口,您已经提到了领域的领导者:memcached、AppFabric、Redis等。如果这些已经在您的环境中设置好并且/或者您熟悉它们,我肯定可以看到在有多个Web服务器(大或小)时使用它们。

我建议至少查看一下Redis。它是提到的这组中的新类别,但它很轻巧、快速,并且除了键/值存储外,还具有其他适用于分布式系统的功能,例如发布/订阅。


很好,我就预料到无法完成,只是想在这里确认一下。我猜你所说的“内存中”其实是指“进程内”,因为像memcached、AppFabric和Redis这些也都是在内存中。我想知道的是HttpRuntime.Cache是否有像ASP.NET会话状态那样的简单独立进程模式。 - Darren
我猜你总可以使用它来“独立启动”进程……但为什么要重复发明轮子呢? - Darren
是的,在运行过程中是一个更合适的术语(我会进行编辑)。Redis默认情况下确实使用持久化存储,但你可以将其切换到严格的内存运行。相比竞争对手仍然非常快速并且具有持久性,这是一个很好的功能。 - Jonathan Harrison
如果您在 .net (Microsoft) 环境中,我强烈建议选择 AppFabric,因为它利用了关于 2008 R2 和其他支持基础设施的现有知识。 - Elad Lachmi

0

.Net的System.Runtime.Caching API提供了抽象类ObjectCache,该类提供了访问对象缓存的基本方法和属性。在.Net中提供的此抽象类的唯一实现是MemoryCache,它是一个进程内缓存,不能在多个Web服务器之间共享。

但是,您可以自己扩展ObjectCache类以包含分布式缓存的功能。

或者,您可以使用提供ObjectCache实现的分布式缓存解决方案,以获得开箱即用的解决方案。NCache是提供ObjectCache实现的分布式缓存解决方案之一,如此处所述。

NCache已经开发了一个.NET 4.0缓存提供程序,可以实现极快和高度可扩展的.NET分布式缓存。这使得使用.NET 4.0缓存的应用程序现在可以扩展到多服务器环境,并消除任何数据库瓶颈。 您可以将NCache作为您的.NET分布式缓存,而无需对应用程序进行任何代码更改。您只需要更改配置文件以使用NCache即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接