我有一个带有简单缓存帮助器的ASP.Net应用程序。 在VS Web服务器下,它工作正常。 在IIS 6.0下缓存不起作用 - 对象,保存了previos,一分钟后没有返回(没有例外)。 可能有什么不对?
public static class CacheHelper
{
public static string Share<T>(T @object, TimeSpan period)
{
var uniqueKey = Guid.NewGuid().ToString();
HttpContext.Current.Cache.Add(uniqueKey, @object, null, Cache.NoAbsoluteExpiration,
period, CacheItemPriority.BelowNormal, null);
return uniqueKey;
}
public static void ShareViaCookie<T>(string key, T @object, TimeSpan period)
{
var cachedObject = GetFromCookie<T>(key);
if (ReferenceEquals(cachedObject, null))
{
var uniqueKey = Share(@object, period);
HttpContext.Current.Response.Cookies.Set(new HttpCookie(key, uniqueKey)
{
Expires = DateTime.Now.AddYears(1)
});
}
else
{
HttpContext.Current.Cache[GetKeyFromCookie(key)] = @object;
}
}
public static T GetShared<T>(string key)
{
string uniqueKey = HttpContext.Current.Request.QueryString[key];
return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : GetFromCookie<T>(key);
}
private static T GetFromCookie<T>(string key)
{
string uniqueKey = GetKeyFromCookie(key);
return !string.IsNullOrEmpty(uniqueKey) ? (T)HttpContext.Current.Cache.Get(uniqueKey) : default(T);
}
private static string GetKeyFromCookie(string key)
{
return HttpContext.Current.Request.Cookies[key]
.IIf(it => it != null, it => it.Value, it => null);
}
}
答案 0 :(得分:2)
也许没有任何技术上的错误。缓存并不意味着在持久化后的任何对象都将被返回。
如果您的网站缓存了大量项目且缓存不够大,则可能会不断寻找要从缓存中删除的对象。在这种情况下,有时刚刚缓存的对象可能是一个很好的删除对象。如果你有100个对象的空间,并且缓存已经满了至少访问过一次的项目,那么它可能永远不会缓存“从未被访问过”的新对象。这确实发生在奇怪的场合。