ObjectCacheを使用して、次のようなアイテムを追加する場合:
ObjectCache cache = MemoryCache.Default;
string o = "mydata";
cache.Add("mykey", o, DateTime.Now.AddDays(1));
オブジェクトは1日で期限切れになることを理解しています。しかし、オブジェクトが1日後に1/2にアクセスされる場合:
object mystuff = cache["mykey"];
これにより、タイマーがリセットされて、キー「mykey」を持つエントリに最後にアクセスしてから1日間になりますか、それとも期限が切れるまで1日に1/2ですか?
答えがノーであり、これを行う方法がある場合、私は知りたいです。
ありがとう。
使用できるキャッシュポリシーには2つのタイプがあります。
_CacheItemPolicy.AbsoluteExpiration
_ は、設定された時間が経過するとエントリを期限切れにします。
_CacheItemPolicy.SlidingExpiration
_ は、設定された時間内にアクセスされていない場合、エントリを期限切れにします。
使用しているObjectCache Add()
オーバーロードは、絶対有効期限として扱います。つまり、アクセス回数に関係なく、1日後に期限切れになります。他のいずれかを使用する必要があります overloads 。スライド式の有効期限を設定する方法は次のとおりです(もう少し複雑です)。
_CacheItem item = cache.GetCacheItem("item");
if (item == null) {
CacheItemPolicy policy = new CacheItemPolicy {
SlidingExpiration = TimeSpan.FromDays(1)
}
item = new CacheItem("item", someData);
cache.Set(item, policy);
}
_
TimeSpanを適切なキャッシュ時間に変更します。