asp.Netcacheキャッシュ

5057 ワード

Webアプリケーションを最初から最後までずっと存在させたいということですが、なぜApplicationを使わないのでしょうか.実はCacheはしばらくの間自動的にデータを更新することができて、Applicationはこのようにすることができなくて、またApplicationはWebのこのような高同時のシステムの中で必ずスレッドの安全の問題を考慮しなければならなくて、Application自体はスレッドの安全ではありませんて、Cacheはスレッドの安全です.そのため、私は多くのオブジェクトの中でWebから実行するときにデータベースやファイルから一度だけデータを取得します.異なるページではCacheを使用しています.また、Cacheのデータは自動的に更新される可能性があります.そのため、一般的にはデータの更新の問題を考慮する必要はありません.また、Cacheもアプリケーションに関連しており、すべてのページがそのWebアプリケーションに存在する可能性があります.
もちろんまずシステムに慣れなければなりませんWeb.Caching.Cacheというクラスは、ここではその中で多く使われているいくつかの方法と属性だけを話していますが、もっと詳しく紹介する必要がある場合はMSDNを参照してください.
まず、そのAdd()メソッドを紹介し、指定したオブジェクトをCacheオブジェクトセットに追加します.
Insert()メソッドは、同じKeyのCacheトップを上書きします.
Remove()アプリケーションのCacheオブジェクトから指定したアイテムを削除します.
Countプロパティで、キャッシュに格納されているオブジェクトの数を取得します.
ここで私が主に言いたいのはAdd()方法です.Cacheが長期にわたって存在し、しばらくの間自動的にCacheを置き換えるには、それをよく知らなければならないからです.MSDNでこの方法の詳細を見てみましょう.ああ.
C#
public Object Add(
string key,
Object value,
CacheDependency dependencies,
DateTime absoluteExpiration,
TimeSpan slidingExpiration,
CacheItemPriority priority,
CacheItemRemovedCallback onRemoveCallback
)

パラメータ
key
タイプ:System.String
アイテムを参照するためのキャッシュキー.
value
タイプ:System.Object
キャッシュに追加するアイテム.
dependencies
タイプ:System.Web.Caching.CacheDependency
このアイテムのファイル依存またはキャッシュキー依存.依存項目が変更されると、オブジェクトは無効になり、キャッシュから削除されます.依存項目がない場合、このパラメータにはnullNothingullptrnull参照(Visual BasicではNothing)が含まれます.
absoluteExpiration
タイプ:System.DateTime
追加されたオブジェクトが期限切れになり、キャッシュから削除される時間.調整可能期限を使用する場合、absoluteExpirationパラメータはNoAbsoluteExpirationである必要があります.
slidingExpiration
タイプ:System.TimeSpan
追加したオブジェクトに最後にアクセスしたときのオブジェクトの有効期限との間隔.この値が20分に等しい場合、オブジェクトは最後のアクセスから20分後に期限切れになり、キャッシュから削除されます.絶対期限切れを使用する場合、slidingExpirationパラメータはNoSlidingExpirationである必要があります.
priority
タイプ:System.Web.Caching.CacheItemPriority
オブジェクトの相対コストは、CacheItemPriorityが列挙して表します.キャッシュは、オブジェクトを終了するときにこの値を使用します.より低コストのオブジェクトは、より高いコストのオブジェクトの前にキャッシュから除去されます.
onRemoveCallback
タイプ:System.Web.Caching.CacheItemRemovedCallback
キャッシュからオブジェクトを除去するときに呼び出される委任(指定されている場合).キャッシュからアプリケーションのオブジェクトを削除する場合は、アプリケーションに通知します.
戻り値
タイプ:System.Object
コメント
Cacheに同じkeyパラメータを持つアイテムが保存されている場合、このメソッドの呼び出しは失敗します.既存のCacheアイテムを同じkeyパラメータで上書きするには、Insertメソッドを使用します.
absoluteExpirationとslidingExpirationパラメータを同時に設定できません.キャッシュ・アイテムを特定の時間に期限切れにする場合は、absoluteExpirationパラメータを特定の時間に設定し、slidingExpirationパラメータをNoSlidingExpirationに設定します.
キャッシュ・アイテムを最後にアクセスしてから一定期間有効にする場合は、slidingExpirationパラメータを期間間隔に設定し、absoluteExpirationパラメータをNoAbsoluteExpirationに設定します.
この段落はMSDNから転載する
このようなキャッシュをどのように追加するかは、一般的にマスターページのInitイベントまたはLoadイベントにキャッシュを追加します.これにより、リファレンスが最初から実行されることで、頻繁に使用する必要があるオブジェクトをキャッシュすることができるからです.
 
これはインスタンスでcacheを与え、期限切れにコールバック関数を呼び出します.
  DateTime now = DateTime.Now;
            string cachedString = (string)HttpContext.Cache["Now"];
            if (string.IsNullOrEmpty(cachedString))
            {
                cachedString = now.ToString();
                HttpContext.Cache.Insert("Now", now.ToString(), null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration,
                      System.Web.Caching.CacheItemPriority.NotRemovable,
                     new System.Web.Caching.CacheItemRemovedCallback(OnMoveCacheBack)//          
                );
            }

   private void OnMoveCacheBack(string key, object value, CacheItemRemovedReason reason)
        {
            DateTime now = DateTime.Now;
            string cachedString = (string)HttpContext.Cache[key];
            if (!string.IsNullOrEmpty(cachedString))
            {
                HttpContext.Cache.Remove(key);
            }
            HttpContext.Cache.Insert("Now", now.ToString(), null, DateTime.Now.AddMinutes(1), Cache.NoSlidingExpiration,
                   System.Web.Caching.CacheItemPriority.NotRemovable,
                  new System.Web.Caching.CacheItemRemovedCallback(OnMoveCacheBack)//          
             );
        }

 ASP.NETはCacheへのアクセスを容易にするため,HttpRuntimeクラスに静的属性Cacheを追加し,Cacheの機能を任意の場所で使用できるようにした.そして、ASP.NETはまた、Pageという2つの「ショートカット」を追加しました.Cache, HttpContext.Cache、私たちはこの2つのオブジェクトを通じてHttpRuntimeにアクセスすることができます.Cache、注意:この3つは同じオブジェクトにアクセスしています.Page.CacheはHttpContextにアクセスした.Cache,HttpContext.CacheはまたHttpRuntimeに直接アクセスした.Cache