我有一个网页,它缓存一些查询字符串值30秒,这样它就不会收到重复的值。我使用以下课程:

public class MyCache   {

private static ObjectCache cache = MemoryCache.Default;

public MyCache() { }


public void Insert(string key, string value)
{

    CacheItemPolicy policy = new CacheItemPolicy();
    policy.Priority = CacheItemPriority.Default;
    policy.SlidingExpiration = new TimeSpan(0, 0, 30);
    policy.RemovedCallback = new CacheEntryRemovedCallback(this.Cacheremovedcallback);

    cache.Set(key, value, policy);
}

public bool Exists(string key)
{
    return cache.Contains(key);
}

public void Remove(string key)
{
    cache.Remove(key);
}

private void Cacheremovedcallback(CacheEntryRemovedArguments arguments)
{
    FileLog.LogToFile("Cache item removed. Reason: " + arguments.RemovedReason.ToString() +  "; Item: [" +  arguments.CacheItem.Key + ", " + arguments.CacheItem.Value.ToString() + "]");
}
 }

这已经运行了好几个星期,然后突然缓存不再保留值。cacheRemoved回调在项目插入缓存后立即激发,我得到删除的原因:cacheSpecificEviction
它运行在Windows Server 2008 SP1、IIS7.5和.NET 4.0上。在此期间未对操作系统或IIS应用任何更改。
有办法解决这个问题吗?如果没有,在网页中是否有更好的缓存解决方案?
提前谢谢你。

最佳答案

查看MemoryCacheStore的源代码(它应该是MemoryCache.Default使用的默认存储),似乎只有在释放缓存时才会调用带有参数CacheSpecificEviction的remove回调:
https://referencesource.microsoft.com/#System.Runtime.Caching/System/Caching/MemoryCacheStore.cs,230
环顾四周,确保不会意外释放缓存对象。

08-26 16:30
查看更多