Heim  >  Artikel  >  Backend-Entwicklung  >  Lösungen zur Behebung von MemoryCache-Problemen

Lösungen zur Behebung von MemoryCache-Problemen

巴扎黑
巴扎黑Original
2017-09-01 14:32:162954Durchsuche

Dieser Artikel führt Sie hauptsächlich in die relevanten Informationen zu .NET Core 2.0-Migrationstipps und zur Reparatur und Lösung von Speicher-Cache-Problemen ein Wer es braucht, folgt bitte dem Herausgeber, um gemeinsam zu lernen.

Vorwort

Jeder sollte wissen, dass für traditionelle .NET Framework-Projekte der System.Runtime.Caching-Namespace ein häufig verwendetes Tool ist, darunter das Die MemoryCache-Klasse wird häufig zum Implementieren von Speicher-Caching verwendet.

.NET Core 2.0 unterstützt die System.Runtime.Caching-DLL noch nicht, was bedeutet, dass MemoryCache-bezogener Code nicht mehr funktioniert.

Aber die gute Nachricht ist, dass wir die neue API von .NET Core 2.0 verwenden können, um die Speichercache-Funktion zu implementieren und einfach den Code ändern, um das Inkompatibilitätsproblem zu lösen. Im Folgenden gibt es nicht viel zu sagen. Werfen wir einen Blick auf die ausführliche Einführung.

Lösung

1. Importieren Sie den alten Code wie folgt in das Projekt:


using System;
using System.Runtime.Caching;

namespace TestWebApp.Service
{
 public class MemoryCacheService
 {
  static ObjectCache cache = MemoryCache.Default;
  /// <summary>
  /// 获取缓存值
  /// </summary>
  /// <param name="key"></param>
  /// <returns></returns>
  private object GetCacheValue(string key)
  {
   if (key != null && cache.Contains(key))
   {
    return cache[key];
   }
   return default(object);
  }
  /// <summary>
  /// 添加缓存内容
  /// </summary>
  /// <param name="key"></param>
  /// <param name="value"></param>
  public static void SetChacheValue(string key, object value)
  {
   if (key != null)
   {
    CacheItemPolicy policy = new CacheItemPolicy
    {
     SlidingExpiration = TimeSpan.FromHours(1)
     
    };
    cache.Set(key, value, policy);
   }
  }
 }
}

Nach dem Import werden Sie feststellen, dass VS Sie auffordert, den System.Runtime.Caching-Namespace nicht zu finden und den Originalcode nicht direkt zu kompilieren und zu verwenden.

2. Fügen Sie einen Verweis auf den Microsoft.Extensions.Caching.Memory-Namespace hinzu, der die von .NET Core standardmäßig implementierte MemoryCache-Klasse und die neue Speicher-Cache-API


using Microsoft.Extensions.Caching.Memory;
3. Schreiben Sie den Code neu und verwenden Sie die neue API, um die Speicher-Cache-Funktion zu implementieren

Bevor Sie die Initialisierungs-Cache-Objektmethode neu schreiben:


static ObjectCache cache = MemoryCache.Default;
Nach dem Umschreiben der Methode zum Initialisieren des Cache-Objekts:


static MemoryCache cache = new MemoryCache(new MemoryCacheOptions());
Die Methode zum Lesen des Speicher-Cache-Werts wurde geändert:


private object GetCacheValue(string key)
{
 if (key != null && cache.Contains(key))
 {
  return cache[key];
 }
 return default(object);
}
Nach dem Umschreiben:


private object GetCacheValue(string key)
{
 object val = null;
 if (key != null && cache.TryGetValue(key, out val))
 {
  return val;
 }
 else
 {
  return default(object);
 }
}
Änderungen bei der Einstellung des Speicher-Cache-Inhalts Methode:


public static void SetChacheValue(string key, object value)
{
 if (key != null)
 {
  CacheItemPolicy policy = new CacheItemPolicy
  {
   SlidingExpiration = TimeSpan.FromHours(1)
  };
  cache.Set(key, value, policy);
 }
}
Nach der Änderung:


public static void SetChacheValue(string key, object value)
{
 if (key != null)
 {
  cache.Set(key, value, new MemoryCacheEntryOptions
  {
   SlidingExpiration = TimeSpan.FromHours(1)
  });
 }
}

Fazit

Im Einsatz Nachdem Sie den alten Code mit der neuen API unter

neu geschrieben haben, werden Sie feststellen, dass alle ursprünglichen Speicher-Cache-Timeout-Strategien über entsprechende neue APIs verfügen, einschließlich AbsoluteExpiration, SlidingExpiration, usw. Microsoft.Extensions.Caching.Memory

So können wir die neue .NET Core-API weiterhin problemlos verwenden, um mit einfachen Änderungen den größten Teil des vorhandenen alten Codes wiederzuverwenden und ihn zu migrieren, damit er weiterhin funktioniert.

Der vollständige Code nach der Migration lautet wie folgt:


Das obige ist der detaillierte Inhalt vonLösungen zur Behebung von MemoryCache-Problemen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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