Entity Framework (EF) Core Cache

Entity Framework (EF) Core ist die überarbeitete und neu geschriebene Version der objektrelationalen Mapping-Engine von Entity Framework .NET Core Anwendungen. Es ist sehr leicht, erweiterbar und plattformübergreifend.

Allerdings hohe Transaktion .NET Core Anwendungen mit EF Core-Face-Leistung und Skalierbarkeitsengpässe in der Datenbankebene bei Spitzenlasten. Dies liegt daran, dass Sie zwar die Anwendungsebene linear skalieren können, indem Sie weitere Anwendungsserver hinzufügen, aber Sie können keine weiteren Datenbankserver hinzufügen, um sie zu skalieren.

Aber wenn Sie einen verteilten Cache wie NCache in Ihrem .NET Core Anwendungen können Sie diese schnell entfernen Leistungs- und Skalierbarkeitsengpässe und extreme Transaktionslasten bewältigen.

EF Core-Caching durch Erweiterungsmethoden

Erweiterungsmethoden sind ein Feature von C#, mit dem Sie vorhandene Klassen und Typen erweitern können, ohne abgeleitete Klassen zu erstellen. Eine Erweiterungsmethode ist eine spezielle Art von statischer Methode, aber sie wird so aufgerufen, als wäre sie eine Instanzmethode der erweiterten Klasse.

NCache hat seine Caching-Funktionen über Erweiterungsmethoden in EF Core integriert. Dies macht die Verwendung NCache von innen an EF Core-Anwendung sehr einfach und direkt. Nachfolgend finden Sie eine Liste der EF Core-Erweiterungsmethoden, die von bereitgestellt werden NCache.

1. Zwischenspeichern von Transaktionsdaten: FromCache() / FromCacheAsync()

Die häufigsten Daten, die in EF Core zwischengespeichert werden, sind Transaktionsdaten. Dies sind die sich häufig ändernden Daten, die zur Laufzeit erstellt werden (z. B. Kunden, Konten, Aktivitäten usw.) und die Sie nur für kurze Zeit zwischenspeichern, während der Ihre Anwendung sie mehrmals liest.

Mit der FromCache()-Erweiterungsmethode können Sie Transaktionsdaten zwischenspeichern, indem Sie die Ergebnismenge Ihrer Datei zwischenspeichern LINQ-Abfragen. Siehe das Beispiel unten.

//Load suppliers into the cache with the expiration options 
IEnumerable<Suppliers> suppliers = (from supplier in database.Suppliers
				      where supplier.SupplierId < 10
				      select supplier).FromCache(options);

Hier überprüft die Methode FromCache() den Cache auf diese Daten, bevor sie zur Datenbank geht, um diese Daten abzurufen. Wenn es gefunden wird, gibt es es aus dem Cache zurück. Andernfalls ruft es es aus der Datenbank ab, speichert es zuerst im Cache, damit es beim nächsten Mal dort ist, und gibt dann die Ergebnisse an den Aufrufer zurück.

Sie haben die Möglichkeit, entweder die gesamte Sammlung als ein Element im Cache zwischenzuspeichern oder alle ihre Entitäten aufzuschlüsseln und sie separat zwischenzuspeichern. Das Aufbrechen ist nützlich, wenn Sie diese Entitäten auch einzeln abrufen oder aktualisieren möchten. Unten ist die Async-Version dieser Methode.

//Load suppliers into the cache with the expiration options asynchronously
Task<IEnumerable><Suppliers> suppliersTask = (from supplier in database.Suppliers
                                                where supplier.SupplierId < 10
                                                select supplier).FromCacheAsync(options);
suppliersTask.Wait();
IEnumerable<Suppliers> suppliers = suppliersTask.Result.ToList();

2. Zwischenspeichern von Referenzdaten: LoadIntoCache() / LoadIntoCacheAsync()

Referenzdaten sollten Sie vollständig zwischenspeichern. Damit kann man laufen LINQ-Abfragen nur auf den Cache und gehen Sie nie in die Datenbank dafür. Bitte beachten Sie, dass Ihre LINQ-Abfrageergebnisse falsch sind, wenn Sie nicht den gesamten Datensatz im Cache haben, da sie nur den Cache überprüfen und davon ausgehen, dass sich der gesamte Datensatz im Cache befindet.

Mit der LoadIntoCache()-Erweiterungsmethode können Sie Ihren EF Core-Cache mit all Ihren Referenzdaten füllen. Sehen Sie sich das Beispiel unten an, um Ihren Cache zu füllen.

//Load ALL products into the cache as reference data
IEnumerable<Products> products = (from product in database.Products
                                    select product)
                                    .LoadIntoCache(out string cacheKey, options);

3. Referenzdaten suchen: FromCacheOnly() / FromCacheOnlyAsync()

Nachdem Sie den Cache mit allen Referenzdaten geladen haben, können Sie anstelle der Datenbank LINQ-Abfragen darauf ausführen. Dies reduziert den Druck auf Ihre Datenbank und verbessert die Leistung und Skalierbarkeit Ihrer Anwendung. Siehe das Beispiel unten.

//Query for discontinued products from the reference data cache
IEnumerable<Products> products = (from product in database.Products
                                    where product.Discontinued == true
                                    select product).FromCacheOnly();

Bitte beachten Sie, dass Ihr EF Core-Referenzdatencache den gesamten Datensatz enthalten muss (z. B. Produkte in diesem Fall). Andernfalls gibt Ihre FromCacheOnly()-Erweiterungsmethode nur zurück, was sich im Cache befindet, da sie die Datenbank nicht überprüft. Und dies kann falsch sein.

4. Aktualisieren des Cache: Cache-Klasse für EF Core

Wann immer Sie Änderungen an Ihren Entitäten in EF Core vornehmen, können Sie den EF Core-Cache damit aktualisieren, indem Sie das „Cache“-Handle abrufen und den entsprechenden Update-Methodenaufruf durchführen. Unten ist ein Beispiel.

// Initialize the database context
NorthwindContext database = new NorthwindContext();
    ...
// Add some new entities to the database
database.Shippers.Add(shipperPandaExpress);
database.Shippers.Add(shipperTitanic);
database.SaveChanges();
  
Cache cache = database.GetCache();
cache.Insert(shipperPandaExpress, out cacheKey, options);
cache.Insert(shipperTitanic, out cacheKey, options);
  
//By obtain a Cache class handle, you can directly add, update, or remove entities from EF Core. And, then updated data shows up in your LINQ queries. This gives you a lot more control over updating entities when your modifying data yourself. Below is the interface of Cache class.
    
namespace Alachisoft.NCache.EntityFrameworkCore
{
    public class Cache
    {
        public void Insert(object entity, out string cacheKey, CachingOptions options);
        public void Remove(object entity);
        public void Remove(string cacheKey);
        public void RemoveByQueryIdentifier(Tag tag);
    }
}

Warum verwenden NCache als EF Core Cache?

Entity Framework Core wird nicht mit seinem Caching-Framework (wie NHibernate tut). Aber, NCache hat für Sie ein sehr flexibles, leistungsfähiges und dennoch sehr einfaches Caching-Framework entwickelt. Sie sollten es aus folgenden Gründen verwenden:

  • Verwendung in Multi-Server-Umgebung: NCache ist ein verteilter Cache, der sehr gut in einer Umgebung mit mehreren Servern funktioniert. Wenn dein .NET Core Wenn die Anwendung eine hohe Transaktionsdichte aufweist, besteht die Möglichkeit, dass sie nur in einer Umgebung mit mehreren Servern ausgeführt wird NCache wird für dich arbeiten.
  • Extrem schnell: NCache ist ein extrem schneller verteilter In-Memory-Cache und bietet Ihnen Reaktionszeiten von weniger als einer Millisekunde.
  • Lineare Skalierbarkeit: NCache wird nie zu einem Skalierbarkeitsengpass. Damit können Sie dem Cache-Cluster Server hinzufügen, um eine lineare Skalierbarkeit zu erreichen und extreme Transaktionslasten zu bewältigen.
  • Cache-Größe wächst unendlich: NCache sorgt für Cache-Partitionierung und fasst dafür Speicher aller Cache-Server zusammen. Also kannst du Cache-Speicher vergrößern indem Sie einfach weitere Server zum Cache-Cluster hinzufügen.
  • Intelligente Datenreplikation: NCache intelligent repliziert den Cache und ohne Leistungseinbußen. Sie verlieren also keine Cache-Daten, selbst wenn ein Cache-Server ausfällt.
  • NCache bietet Ihnen 100 % Betriebszeit: NCache hat eine selbstheilender dynamischer Cache-Cluster ohne Single Point of Failure. Infolge, NCache ermöglicht es Ihnen, Cache-Server zur Laufzeit hinzuzufügen oder zu entfernen, ohne Ihre Anwendung oder den Cache zu stoppen

Bitte sehen Sie sich alle Details an NCache Funktionen an Editionsvergleich Seite. Lesen Sie mehr über NCache und laden Sie eine voll funktionsfähige 30-Tage-Testversion herunter NCache von den unten stehenden Links.

Was macht man als nächstes?

© Copyright Alachisoft 2002 - Alle Rechte vorbehalten NCache ist eine eingetragene Marke der Diyatech Corp.