多个项目的单个缓存对象

时间:2015-09-17 08:55:57

标签: c# .net vb.net architecture

我在Windows应用程序中使用了.net缓存对象。我在加载应用程序时构建了这个缓存对象。这有助于我们获得表演。一切都很好。

由于这一成功,我们开始在其他所有应用程序中实现此缓存机制; windows,service,web等。它们都使用相同的缓存对象 - 但每个应用程序都有自己的副本。

在一台服务器中,我们托管了40个应用程序。他们都使用Cache对象。但是他们有自己的缓存对象副本。一个缓存对象的大小为100 MB。服务的内存消耗为40 * 100 MB。我们不得不升级(增加内存)服务器以支持该服务器中托管的应用程序。

我需要帮助来审核我所遵循的方法。我的所有应用程序(服务,Web,窗口)都需要相同的缓存对象。如何设计我的应用程序来支持它?有没有工具来处理这种情况?

2 个答案:

答案 0 :(得分:4)

您需要查看分布式缓存,例如redis(其中有一些不错的.net客户端库,如StackExchange.Redis。)

NCacheDache或其他人,我个人只使用过Redis。

请注意,分布式缓存带有一系列问题和需要注意的问题。例如,它通常“较慢”,因为您必须编组并将缓存对象发送到进程外缓存进程。并且您的数据必须首先“可序列化”(从这个角度来看,字符串当然是最容易的)。

还要考虑高级故障情况,例如,当进程外缓存无法访问甚至关闭时会发生什么?当您只是在进程中缓存时,就不会发生类似的事情。

答案 1 :(得分:1)

使用NCache(开源或企业版)并检查topologies如何存储缓存对象并避免故障转移。它旨在实现可伸缩性,因此如果您的应用程序将来确实增加,您可以在运行时添加更多服务器。

在我看来,

Redis带来了一系列问题,这里有一小段内容

完全披露:我为NCache工作,所以不管你有任何问题,我都乐意提供帮助。