web-dev-qa-db-ja.com

.NETキャッシングは、Sliding Expirationの仕組みを教えてください。

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ですか?

答えがノーであり、これを行う方法がある場合、私は知りたいです。

ありがとう。

44
Kelly

使用できるキャッシュポリシーには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を適切なキャッシュ時間に変更します。

84
mfanto