5

这个问题:

是否可以在多个 Web 服务器之间共享 HttpRuntime.Cache?

..与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 会更好。

4

2 回答 2

8

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

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

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

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

我建议至少检查一下 Redis。它是所提到的组中较新的类别,但它是轻量级的、快速的,并且除了键/值存储之外,它还具有其他非常适合分布式系统的功能,例如发布/订阅。

于 2012-12-11T07:45:19.677 回答
0

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

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

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

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

于 2014-12-28T10:47:37.893 回答