dotnet System.Web.Caching.Cache vs System.Runtime.Caching.MemoryCache

时间:2010-10-07 14:33:52

标签: .net asp.net caching

我有一个需要在缓存中存储数据的类。 最初我在asp.net应用程序中使用它,所以我使用了System.Web.Caching.Cache。

现在我需要在Windows服务中使用它。 现在,据我了解,我不应该在非asp.net应用程序中使用asp.net缓存,所以我正在调查MemoryCache。

问题是它们不兼容,所以我改为在asp.net应用程序中使用MemoryCache,或者我需要创建一个适配器,以确保两个缓存实现具有相同的接口(可能派生自ObjectCache并在内部使用asp.net缓存?)

在asp.net中使用MemoryCache有什么含义?

Nadav

2 个答案:

答案 0 :(得分:7)

我会选择你的第二个选项并稍微重构一下。我将创建一个接口和两个提供程序(它们是您的适配器):

public interface ICachingProvider
{
    void AddItem(string key, object value);
    object GetItem(string key);
}

public AspNetCacheProvider : ICachingProvider
{
    // Adapt System.web.Caching.Cache to match Interface
}

public MemoryCacheProvider : ICachingProvider
{
    // Adapt System.Runtime.Caching.MemoryCache to match Interface
}

答案 1 :(得分:4)

今天早上我遇到了一个可以帮助解决这种情况的图书馆。它是一个CacheAdapter,允许您针对公共接口进行编码,并通过配置交换缓存机制(System.Web.Caching,System.Runtime.Cache或AppFabric)。

https://bitbucket.org/glav/cacheadapter