重複した値を受信しないように、いくつかのクエリ文字列値を 30 秒間キャッシュする Web ページがあります。私は次のクラスを使用しています:
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 これは、.NET 4.0 を使用する Windows Server 2008 SP1、IIS7.5 で実行されています。この間、OS または IIS に変更は適用されませんでした。
これを解決する方法はありますか?そうでない場合、Web ページで使用するより良いキャッシュ ソリューションはありますか?
前もって感謝します。