Heim > Artikel > Backend-Entwicklung > .net-Cache – dateibasiertes Caching
Zwei in .net unterstützte Abhängigkeiten:
CacheDependency td> |
SqlDependency |
||||
Zeigt Abhängigkeit von Dateien oder Verzeichnissen an |
Zeigt Abhängigkeit von der SQL-Datenbank an |
Gleitende Ablaufzeit |
|
Ein bestimmter Zeitpunkt, Typ ist DateTime |
A Zeitintervall vom Typ TimeSpan |
Da wir bei begrenztem Speicher eine große Datenmenge zwischenspeichern müssen, müssen wir die zwischengespeicherten Daten priorisieren, damit unwichtige Daten bei Bedarf zwischengespeichert werden können. Mithilfe der Priorität wird die Wichtigkeit der zwischengespeicherten Daten angegeben. Wichtige Daten können für einen längeren Zeitraum im Speicher gehalten werden.
Benachrichtigung löschen
Kann bereitgestellt werden, wenn zwischengespeicherte Daten aus dem Speicher entfernt werden. Ein Benachrichtigungsmechanismus zum Aufrufen benutzerdefinierte Methoden zurück, die der Definition des CacheItemRemovedCallback-Delegaten entsprechen müssen. .
<asp:Label Text="" runat="server" id="label1"/>
Besonderer Hinweis:
1. Der Zeitpunkt eines Rückrufs ist unvorhersehbar und nicht vorhersehbar Wenn der Ausführungsthread der Rückrufmethode den Kontext von HttpContext hat, können Sie den Cache der Anwendung über das Cache-Attribut von HttpRuntime verwenden, um einen Verweis auf das Cache-Objekt zu erhalten
<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>
2. Sie können Instanzmethoden nicht als Rückrufmethoden auf der Seite verwenden. Wenn Sie die Rückrufmethode auf der Seite blockieren, verhindert der Verweis auf die Rückrufmethode den Garbage-Collection-Mechanismus Der Speicher wird schnell erschöpft sein.
3. Die Rückrufmethode wird im Allgemeinen über die statische Methode der benutzerdefinierten Klasse oder über die statische Methode des Seitenobjekts implementiert.
Fügen Sie zunächst eine Beschriftung auf der Testseite hinzu:
protected void Page_Load(object sender, EventArgs e) { this.label1.Text = CacheManager.Message; //获取缓存 }
Als nächstes fügen Sie die Cache-Verwaltungsklasse hinzu:
Unterscheiden Sie hier zwischen der Add-Methode und der Insert-Methode des Caches:
Fügen Sie in webform1 eine Zeile zum Testen hinzu: