多级缓存-具有MemoryCash的Appfabric

本文关键字:Appfabric MemoryCash 缓存 -具 多级 | 更新日期: 2023-09-27 18:24:05

在我当前的设置中,我有一个专用的Appfabric服务器。存储在那里的大多数对象都是引用对象,这意味着大多数操作都是"Get"操作。因此,我考虑使用LocalCache。不幸的是,最近我遇到了由于各种网络问题导致的缓存服务器可用性问题。在这些情况下,由于我编写了一个提供程序,应用程序服务器可以继续直接与DB一起工作。然而,正如预期的那样,它对性能有很大的影响。

我希望能够为高度引用的对象使用某种本地缓存,即使缓存服务器关闭。为此,我考虑使用.Net 4的MemoryCache。我并不真正关心对象是否过时,而且我依赖于超时驱逐策略,因此我不担心应用程序服务器之间的同步。

我想听听你对这个解决方案有什么看法。-我还有什么需要考虑的吗?-有没有更好的解决方案可以在缓存服务器关闭的情况下为高度引用的对象提供快速访问?

多级缓存-具有MemoryCash的Appfabric

Appfabric的LocalCache是一个客户端缓存,是客户端应用程序的本地和inproc缓存,它存储对常用数据的引用,因此应用程序不需要再次反序列化同一对象。但是,由于LocalCache可以和缓存服务器一起工作,所以如果缓存服务器关闭,它将不起作用。

正如您所提到的,解决问题的一个可能方案是,拥有独立的客户端缓存,因此即使缓存服务器出现故障,客户端缓存仍然可用。

当依赖inproc缓存时,您必须记住进程内缓存存储缓存对象的引用。如果您的应用程序在从缓存中获取对象后对其进行了修改,那么它也将在缓存中进行修改。另外,若多个线程最终可能会修改缓存中的同一项,则需要对此类对象进行线程同步。

然而,即使使用独立的客户端缓存,您的应用程序最终也可能频繁地访问数据库,因为一个应用程序服务器的客户端缓存中的数据将无法访问其他服务器。

更好的解决方案可能是使用复制的缓存服务器,其中每个服务器都将拥有所有缓存的数据。这不仅可以提高引用数据的获取性能,还可以消除单点故障,就像您的情况一样。

如果Appfabric不是应用程序的硬性要求,您可以考虑NCache以获得更好的可扩展性和高可用性。

您考虑过AppFabric的本地缓存功能吗?还是它不适合你?