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

Asp.net 是否可以在多个web服务器之间共享System.Runtime.Caching缓存对象?,asp.net,.net,caching,distributed-caching,Asp.net,.net,Caching,Distributed Caching,这个问题: …涉及 …我想我知道答案,但为了每个人的利益,新的: 这在现实中是可能的吗?或者最好使用memcached/AppFabric/redis/xyz。HttpRuntime.Cache在进程中运行(即在服务器内存中),并且不能在多个web服务器之间共享。您可以使用自定义提供程序扩展提到的System.Runtime.Caching,以使用诸如SQL Server或专用服务器之类的平台集中缓存 推荐的多web服务器缓存策略肯定取决于环境 在低端,使用SQL Server是一种可能为.

这个问题:

…涉及

…我想我知道答案,但为了每个人的利益,新的:


这在现实中是可能的吗?或者最好使用memcached/AppFabric/redis/xyz。

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

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

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

在高端方面,您提到了该领域的领先者:memcached、AppFabric、Redis等。如果这些已经在您的环境中设置,并且/或者您对它们很熟悉,那么无论您有多个web服务器(大或小),我都可以看到它们的使用


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

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

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

或者,对于开箱即用的解决方案,您可以使用分布式缓存解决方案,该解决方案为分布式缓存提供ObjectCache的实现。 是一种分布式缓存解决方案,它提供了

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


很酷,我原以为做不到,只是想在这里说出来。我猜“内存中”指的是“进程中”,因为memcached、AppFabric、Redis当然也都在内存中。我想知道的是,HttpRuntime.Cache是否像ASP.NET会话状态那样有一些简单的单独进程模式……我想你总是可以使用它来“滚动你自己的”单独进程……但为什么要重新发明轮子呢?是的,进程内是一个更合适的术语(我会编辑)。仅供参考,Redis默认情况下使用的是持久存储。。。但是,您可以将其切换为在内存中严格运行。与竞争对手相比,持久性仍然非常快,而且是一项非常好的功能。如果您在.net(Microsoft)环境中,我强烈建议您选择AppFabric,因为它利用了有关2008 R2和其他支持基础架构的现有知识。