2009-12-08 20 views
6

したがって、フラッシュオブジェクトの開始点と終了点を設定する深夜に実行されるプロセスがあります。これは1日に1回だけ実行する必要があるので、明らかに結果セットをキャッシュしています。ASP.NET 2.0の特定の時刻にキャッシュをクリアします

しかし、データがまだmidniteの後にキャッシュされている場合、キャッシュが期限切れになるまで、最も正確なデータを取得していません。

私は基本的に、午後11時59分59秒に期限切れになるようにキャッシュを必要とします。そのため、午前12:00に正しいデータが取得されます。

私はテーブルからSQLキャッシュ依存関係を推測していますが、データを引き出すのは理想的ですが、以前はこれを設定していませんでした。

正確に真中で特定のアイテムを削除するようキャッシュに指示する方法はありますか?

ありがとうございました!

--Absolute有効期限---

私はそれを得たと思う:

DateTime expireWeights = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, 23, 59, 59, 999); 
Cache.Insert("CacheItemName", itemToCache, null, expireWeights, System.Web.Caching.Cache.NoSlidingExpiration); 
+0

+1興味深い質問です。私は答えにも興味があります。 – Saar

+1

absoluteExpirationは、デルタではなく、DateTimeです。下の私の答えを見てください。 – RickNZ

+0

答えを選択することを忘れないでください... – RickNZ

答えて

5

キャッシュオブジェクトに絶対時刻を設定することができます。これはDateTimeです。

また、absoluteExpirationとSqlCacheDependencyを組み合わせることもできます。

キャッシュが期限切れになったときに新しいデータをプルしないという問題については、期限切れの通知を受け取るためにCacheItemRemovedCallbackを配線し、その時点でキャッシュを更新することができます。

+0

こういうの? DateTime expireWeights = new DateTime(DateTime.Now.Year、DateTime.Now.Month、DateTime.Now.Day、23、59、59、999); Cache.Insert( "CacheItemName"、list、null、expireWeights、System.Web.Caching.Cache.NoSlidingExpiration); –

+1

もちろん、私はNowの代わりにUtcNowを使用することを除いて、3つの異なるインスタンスを作成するのではなく、1つのインスタンスを使用します。 – RickNZ

1

あなたは「時間ベースの依存関係」の下で、hereを見れば、それが失効した項目を設定する方法を示しています特定の時間にそれはあなたが探しているものですか?

+0

実際にはありません。時間ベースの依存関係は絶対的ではありません。私は正確にミッドナイトでクリアするように言うことはできません、私は "10分でクリアするか2時間"と言うことができますか? –

+1

より良いリンクは次のようになります:http://msdn.microsoft.com/en-us/library/4y13wyk9.aspx - ただし、アイテムを挿入するたびに正しいDateTimeを計算する必要があります。今日の日付、時刻23:59:59に設定し、TimeSpanを 'Cache.NoSlidingExpiration'に設定するようにしてください。 –

+0

@JackM:Ok。しかし、現在の時刻を知っていれば、深夜までの分数を自明に計算できます。また、NoSlidingExpirationについてZhaphが言ったことはまさに正しいことです。 –

3

なぜ絶対有効期限に問題があるのか​​わかりません。アイテムが期限切れになる正確な日時をキャッシュから指定することができます。したがって、次のコード行では、キー "MyKey"の下にキャッシュに "myObject"を挿入し、翌日の深夜(キャッシュのエントリーに関係なく)に有効期限が切れます。

Cache.Insert("MyKey", myObject, null, DateTime.Today.AddDays(1), TimeSpan.Zero); 
+0

私の混乱は、あなたが日を追加していた場合、それが午後1時に入力された場合、翌日の午後1時に期限が切れることになりました。 –

+0

はい、日をDateTimeに追加すると、今日、それはすでに時間を無駄にしています。 –

+0

DateTime.Today.AddSeconds(86399)23:59:59を取得するには?ダニー。 DateTime.UtcNowから現在の月の日と年を引っ張っているようですが、少しきれいかもしれません。しかし、本当に同じ最終結果。 – RickNZ

関連する問題