这个问题:
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会更好。
答案 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。