0

asp.netでキャッシュの有効期限を制御するにはどうすればよいですか?絶対有効期限を使用し、キャッシュは3時間ごとに有効期限が切れます。ここで、条件を追加したいので、条件がtrueの場合にのみ、キャッシュは3時間の終わりに期限切れになります。それ以外の場合、条件がfalseの場合、キャッシュは期限切れになりません。

これを行う方法はありますか?

私は次の形式を使用しています:

ctx.Cache.Insert("cachename", cacheValue, null,
                  DateTime.Now.AddHours(Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])), System.Web.Caching.Cache.NoSlidingExpiration, 
                 System.Web.Caching.CacheItemPriority.Default,
                 null
                 );

ここで、期間は3時間です。したがって、キャッシュは3時間で自動的に期限切れになります。条件で有効期限を制御する方法はありますか?

4

2 に答える 2

4

どうですか:

DateTime absoluteExpiration = condition ? 
                  DateTime.UtcNow.AddHours(...) : 
                  Cache.NoAbsoluteExpiration;
ctx.Cache.Insert(..., absoluteExpiration, Cache.NoSlidingExpiration, ...);

ところで、absoluteExpiration パラメータの MSDN の説明では、絶対有効期限を計算するのDateTime.UtcNowではなく、使用することを推奨しています。DateTime.Now

于 2012-06-12T07:04:07.230 に答える
1

cacheValue を条件をチェックするデリゲートにすることができます

ctx.Cache.Insert("cachename", () => condition? null : cacheValue, null,
    DateTime.Now.AddHours(
        Int32.Parse(siteViewModel.ApplicationSettings["CacheDurationHours"])),
    System.Web.Caching.Cache.NoSlidingExpiration,
    System.Web.Caching.CacheItemPriority.Default,
    null
);

そして、それを取得するには、次のようなものを使用します

var del = ctx.Cache["cachename"] as Func<CacheValueType>;
if (del != null) cacheValue = del();

簡単な方法は、キャッシュではなく静的を使用し、有効期限としてプライベート日付のみを使用することです。

于 2012-06-12T03:03:07.167 に答える