.net でサポートされている 2 つの依存関係
CacheDependency | Sql依存関係 |
はファイルまたはディレクトリへの依存性を表します |
SQLデータベースへの依存性を表します |
有効期限
絶対有効期限 | スライド有効期限 |
特定の時点、タイプはDateTime
|
時間間隔、タイプはTimeSpan |
Priority: CacheItemPriority
大量のデータをキャッシュする必要があるため、メモリが限られている場合は、必要に応じて重要でないデータをキャッシュから移動できるように、キャッシュされたデータに優先順位を付ける必要があります。優先度は、キャッシュされたデータの重要性を指定するために使用され、重要なデータを長期間メモリ内に保持できます。
削除通知
キャッシュされたデータがメモリから削除されるとき、メソッドは CacheItemRemovedCallback デリゲートの定義に準拠する必要があります。 。
特別な注意:
1. コールバックのタイミングは予測できません。リクエストコンテキストがない場合にキャッシュを取得する
を使用する場合、オブジェクトの参照を使用してアプリケーションのキャッシュを使用できます。コールバック メソッドへのポインタがブロックされているため、ページ上のコールバック メソッドが参照されないため、ガベージ コレクションが妨げられるため、メモリがすぐに使い果たされます。
3. 通常、コールバック メソッドは、カスタム クラスの静的メソッド、またはページ オブジェクトの静的メソッドを使用して実装されます。
まず、テスト ページにラベルを追加します:
<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) に注目してください。