Asp.net 多站点的正确缓存体系结构

Asp.net 多站点的正确缓存体系结构,asp.net,caching,redis,appfabric,Asp.net,Caching,Redis,Appfabric,我正在为一个场景而挣扎,该场景涉及在单个web服务器(IIS 8/Windows server 2012)上跨多个web应用程序访问单个缓存 目前我们有一台16GB内存的服务器,它只运行一个站点。 为了论证起见,让我们假设这个站点本身消耗10GB的内存(我知道很多) 它将所有内容存储在System.Web.HttpRuntime.Cache中,检索速度非常快。一个典型的场景是从这个缓存中检索10000个对象,它可以在几毫秒内完成 如果我想向该服务器添加另一个web应用程序,该应用程序与服务器上运

我正在为一个场景而挣扎,该场景涉及在单个web服务器(IIS 8/Windows server 2012)上跨多个web应用程序访问单个缓存

目前我们有一台16GB内存的服务器,它只运行一个站点。 为了论证起见,让我们假设这个站点本身消耗10GB的内存(我知道很多)

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

如果我想向该服务器添加另一个web应用程序,该应用程序与服务器上运行的另一个站点99.9%相同,并且理想情况下希望通过快速HttpRuntime.Cache访问该站点中的所有内容,那么这会变得很棘手

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

Ive尝试了AppFabric、Redis和NCache,它们都是分布式缓存代理,它们检索相同10000个对象的最快速度约为2秒,这对于按需网站来说是不好的。(顺便说一句,我很确定这2秒钟中有1.999秒是反序列化的,这也是cpu密集型的)


我是否遗漏了一些显而易见的东西……一种让一台服务器上的两个web应用访问缓存的方法,它不需要昂贵的序列化/反序列化?或者是时候为一个新的Web服务器付出代价了。

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


当使用redis获取多个密钥时,请确保在单个事务(MULTI/EXEC)中完成,或者至少不要对每个密钥执行一次调用,因为这非常缓慢且效率低下(Web服务器将花费大量时间对redis执行IO)。

我理解您的情况。事实上,许多人面临着同样的问题。我鼓励你

使用NCache的“客户端缓存”功能可以缓存整个对象的子集的步骤

NET应用程序进程内存中的分布式缓存

使用客户端缓存,您可以实现性能目标。而且,由于幕后的分布式缓存,您仍然能够构建非常大的缓存。这是使用独立Http缓存无法做到的

如果你想和团队里的人一对一谈谈,请告诉我