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

时间:2012-12-11 06:11:26

标签: asp.net .net caching distributed-caching

这个问题:

Is it possible to share HttpRuntime.Cache between multiple web servers?

..与http://msdn.microsoft.com/en-us/library/system.web.caching.aspx

相关

..我想我知道答案,但是对于每个人都有好处,对于新人:

http://msdn.microsoft.com/en-us/library/system.runtime.caching.aspx

现实可行吗?或者使用memcached / AppFabric / redis / xyz会更好。

2 个答案:

答案 0 :(得分:8)

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

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

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

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

我建议至少检查一下Redis。它是上述组中较新的类别,但它重量轻,速度快,除了键/值存储外,它还具有其他功能,非常适合分布式系统,如pub / sub。

答案 1 :(得分:0)

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

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

或者对于开箱即用的解决方案,您可以使用分布式缓存解决方案,该解决方案为分布式缓存提供ObjectCache的实现。 NCache是提供ObjectCache实现的分布式缓存解决方案之一,如here所述

  

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