.net キャッシュ - ファイルベースのキャッシュ

黄舟
リリース: 2017-02-24 10:46:46
オリジナル
2340 人が閲覧しました


まず、.Net でのキャッシュの基本知識

.net でサポートされている 2 つの依存関係


CacheDependency

Sql依存関係

はファイルまたはディレクトリへの依存性を表します

SQLデータベースへの依存性を表します

有効期限


絶対有効期限

スライド有効期限

特定の時点、タイプはDateTime

時間間隔、タイプはTimeSpan


Priority: CacheItemPriority

大量のデータをキャッシュする必要があるため、メモリが限られている場合は、必要に応じて重要でないデータをキャッシュから移動できるように、キャッシュされたデータに優先順位を付ける必要があります。優先度は、キャッシュされたデータの重要性を指定するために使用され、重要なデータを長期間メモリ内に保持できます。

削除通知

キャッシュされたデータがメモリから削除されるとき、メソッドは CacheItemRemovedCallback デリゲートの定義に準拠する必要があります。 。

特別な注意:

1. コールバックのタイミングは予測できません。リクエストコンテキストがない場合にキャッシュを取得する

を使用する場合、オブジェクトの参照を使用してアプリケーションのキャッシュを使用できます。コールバック メソッドへのポインタがブロックされているため、ページ上のコールバック メソッドが参照されないため、ガベージ コレクションが妨げられるため、メモリがすぐに使い果たされます。

3. 通常、コールバック メソッドは、カスタム クラスの静的メソッド、またはページ オブジェクトの静的メソッドを使用して実装されます。

2 番目のファイルベースのキャッシュの例

まず、テスト ページにラベルを追加します:

  <asp:Label Text="" runat="server" id="label1"/>
ログイン後にコピー

次に、キャッシュ管理クラスを追加します:

<span style="font-size:14px;">namespace 基于文件的缓存依赖
{
    public class CacheManager
    {
        public static string Message {

            get {
                HttpContext context = HttpContext.Current;

                //首先从缓存中获取
                string message = context.Cache["Message"] as string;

                //如果缓存中没有数据
                if (message==null)
                {
                    string path = context.Server.MapPath("TestFileCache.txt");
                    message = System.IO.File.ReadAllText(path);

                    //将信息保存到缓存中,设置响应的过期时间为1分钟
                    context.Cache.Add(
                        "Message",
                        message,
                        new System.Web.Caching.CacheDependency(path),//依赖于文件或者目录的依赖
                        System.Web.Caching.Cache.NoAbsoluteExpiration,//不使用绝对过期时间
                        new TimeSpan(0, 0, 5),//缓存的时间
                        System.Web.Caching.CacheItemPriority.Normal, //缓存的优先级
                        Callback); //过期时的回调
                    
                }

                return message;
            }
        
        }


        /// <summary>
        /// Callbacks the specified key.
        /// </summary>
        /// <param name="key">The key.</param>
        /// <param name="value">The value.</param>
        /// <param name="reason">The reason.</param>
        /// <remarks>Editor:v-liuhch CreateTime:2015/5/26 20:13:22</remarks>
        private static void Callback(
            
            string key,
            Object value,
            System.Web.Caching.CacheItemRemovedReason reason
            //原因
            ) {

                if (reason == System.Web.Caching.CacheItemRemovedReason.Expired)
                {
                   HttpRuntime.Cache.Insert("Message","时间已到,缓存已过期");
                    
                }
                }
           
        
        }

}</span>
ログイン後にコピー

ここで、キャッシュの Add メソッドと Insert メソッドを区別します。

Add を呼び出すとき、追加されるキャッシュ項目が存在する場合、呼び出しは失敗しますが、insert が使用される場合は、新しく挿入された値が使用されます。元の値が上書きされます。

webform1 で、テストする行を追加します:

 protected void Page_Load(object sender, EventArgs e)
        {
                this.label1.Text = CacheManager.Message;   //获取缓存

        }
ログイン後にコピー

ファイルのコンテンツは 5 秒後に期限切れになるように設定されているため、読み取られていることがわかります。 5 秒でリフレッシュします:

ただし、複数のテストを通じて、リフレッシュ後に有効期限が発生する正確な時間は 5 秒ではないことがわかり、 コールバックのタイミングも検証されています。予測不可能です

上記は .net キャッシュ - ファイルベースのキャッシュの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート