Heim  >  Artikel  >  Backend-Entwicklung  >  .net-Cache – dateibasiertes Caching

.net-Cache – dateibasiertes Caching

黄舟
黄舟Original
2017-02-24 10:46:462340Durchsuche


1. Grundkenntnisse über Caching in .Net

Zwei in .net unterstützte Abhängigkeiten:


tbody> table>

Ablaufzeit

CacheDependency

SqlDependency

表示对于文件或者目录的依赖

表示对于SQL数据库的依赖

CacheDependency td>

SqlDependency

绝对过期时间

滑动过期时间

一个特定的时间点,类型为DateTime

 

一个时间间隔,类型为TimeSpan

Zeigt Abhängigkeit von Dateien oder Verzeichnissen an

Zeigt Abhängigkeit von der SQL-Datenbank an

Absolute Ablaufzeit

Gleitende Ablaufzeit

Ein bestimmter Zeitpunkt, Typ ist DateTime

A Zeitintervall vom Typ TimeSpan


Priorität: CacheItemPriority

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.

Zweites Beispiel für dateibasiertes Caching

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:

Beim Aufruf von Add, wenn das hinzuzufügende Cache-Element vorhanden ist Wenn dies der Fall ist, schlägt der Aufruf fehl. Wenn jedoch insert verwendet wird, überschreibt der neu eingefügte Wert den ursprünglichen Wert.



Fügen Sie in webform1 eine Zeile zum Testen hinzu:

Sie können sehen, dass der Inhalt der Datei gelesen wurde. Da er nach 5 Sekunden abläuft, aktualisieren wir ihn nach 5 Sekunden: Durch mehrere Tests haben wir jedoch festgestellt, dass die genaue Ablaufzeit nach der Aktualisierung nicht 5 Sekunden beträgt, und es wurde auch bestätigt, dass der Zeitpunkt von Rückruf ist nicht akzeptabel . Das Obige ist der Inhalt des .net-Caches – dateibasierter Cache. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn).

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn