我正在使用System.Runtime.Caching
库在使用服务层(WCF)的ASP.NET MVC应用程序中实现缓存,但我得到了一些奇怪的行为。这是我的缓存助手类:
public class CacheHelper
{
private static readonly ObjectCache _cache = MemoryCache.Default;
public static T Get<T>(string key) where T : class
{
try
{
return (T) _cache[key];
}
catch (Exception)
{
return null;
}
}
public static void Add<T>(string key, T objectToCache) where T : class
{
_cache.Add(key, objectToCache, DateTime.Now.AddMinutes(5));
}
public static void Add(string key, object objectToCache)
{
_cache.Add(key, objectToCache, DateTime.Now.AddMinutes(5));
}
public static void Clear(string key)
{
_cache.Remove(key);
}
public static void ClearAll()
{
List<string> keys = _cache.Select(c => c.Key).ToList();
foreach (var key in keys)
{
_cache.Remove(key);
}
}
/// omitted for brevity
}
如果我从服务层向缓存添加结果,则该项目已成功添加到缓存中,_cache.GetCount()
将返回1.如果我从服务层尝试CacheHelper.ClearAll()
,则一切都很好。但是,如果我尝试从控制器调用CacheHelper.ClearAll()
,则缓存显示为空,_cache.GetCount()
为0,我无法解决原因?
答案 0 :(得分:1)
到目前为止,据我所知,服务层是一个WCF项目。如果是这样,它将在一个独立的应用程序域上运行,而不是MVC网站。您正在使用的缓存将内容存储在应用程序域内存中,不会在不同的缓存中共享。