1

我正在努力解决有关在单个 Web 服务器(IIS 8 / Windows Server 2012)上跨多个 Web 应用程序访问单个缓存的情况。

目前我们有一台内存为 16GB 的服务器,它只运行一个站点。为了争论,假设这个网站自己消耗了 10GB 的内存(我知道很多)

它将所有内容存储在 中System.Web.HttpRuntime.Cache,检索速度非常快。一个典型的场景是从这个缓存中检索 10,000 个对象,这可以在几毫秒内完成。

当我想向这个服务器添加另一个 Web 应用程序时,它变得很棘手,它与服务器上运行的另一个站点 99.9% 相同,并且理想情况下想要访问这个站点中的所有内容,快速 HttpRuntime.Cache。

我看到的问题是,据我所知,这个 HttpRuntime.Cache 不能在应用程序之间共享。

我尝试过 AppFabric、Redis 和 NCache,所有分布式缓存代理,它们检索相同 10,000 个对象的绝对最快时间约为 2 秒,这对于按需网站来说并不好。(顺便说一句,我很确定这 2 秒中有 1.999 秒充满了反序列化,这也是 CPU 密集型的)

我是否遗漏了一些明显的东西......一台服务器上的两个 Web 应用程序访问不需要昂贵的序列化/反序列化的缓存的方法?或者是时候为新的网络服务器分叉了。

4

2 回答 2

0

我不能确定这一点,所以我会尝试猜测:)

使用 redis 获取多个密钥时,请确保您在单个事务 (MULTI/EXEC) 中执行此操作,或者至少不要为每个密钥执行 1 次调用,因为这非常缓慢且效率低下(网络服务器会花费大量时间进行 IO到redis)。

于 2013-04-16T21:51:00.017 回答
0

I understand your situation. In fact, many people face the same. I would encourage you

to use the Client Cache feature of NCache that lets you cache a subset of the entire

distributed cache in your .NET application's process memory.

With Client Cache, you can achieve your performance goals. And, you would still be able to build a very large cache due to the distributed cache behind the scenes. This is something you cannot do with a stand-alone Http Cache.

Let me know if you would like to talk to somebody in NCache team one-on-one about this.

于 2013-05-20T11:41:38.553 回答