Entity Framework Core ist eine moderne Version der klassischen .NET Entity Framework-Datenobjektrelational-Mapping-Engine. EF Core wurde neu aufgebaut und neu geschrieben, um es schlank und plattformübergreifend zu machen. Wenn Sie EF Core für den Zugriff auf Ihre Anwendungsdatenbank verwenden, kann es während Spitzenlastzeiten zu verzögerten Antwortzeiten der Datenbank kommen. Dadurch wird Ihre drastisch beeinträchtigt EF Core-Anwendungsleistung. Wenn Ihre Anwendungstransaktionslast wächst, können Sie Anforderungslasten bewältigen, indem Sie die Anwendungsebene linear mit mehr Anwendungsservern skalieren. Sie können jedoch keine weiteren Datenbankserver hinzufügen, um die erhöhte Last zu bewältigen.
Hier setzt ein verteilter Cache wie z NCache kommt ins Spiel. Sie können die häufig aufgerufenen Daten zwischenspeichern, um die Antwortzeiten zu verbessern. Die verteilte Natur des Caching-In NCache für Entity Framework Core stellt eine optimale Leistung unter extremen Transaktionslasten sicher, indem der Cache erstellt wird linear skalierbar Auch.
Verwenden von Caching in Entity Framework Core
NCache bietet Integration für das Zwischenspeichern in Entity Framework Core durch Erweiterungsmethoden. Sie können die Ergebnismengen zwischenspeichern LINQ-Abfragen ob es sich um Transaktionsdaten oder Referenzdaten handelt. Die folgenden Erweiterungsmethoden werden bereitgestellt von NCache für EF Core.
Zwischenspeichern Ihrer LINQ-Abfrageergebnisse – FromCache()
Nehmen wir ein Beispiel für die Website einer Fluggesellschaft, die im Juli Flüge nach Hawaii abholen möchte. Die Ergebnismenge wird häufiger abgerufen, daher wäre es eine gute Idee, sie zwischenzuspeichern.
FromCache()
Die Erweiterungsmethode sucht zuerst nach dem Abfrageergebnis im Cache. Wenn es nicht im Cache vorhanden ist oder veraltet ist, wird es aus der Datenbank abgerufen und ebenfalls dem Cache hinzugefügt, was zu schnelleren Antwortzeiten für zukünftige Anforderungen führt.
Die richtigen NCache, können Sie den Abfrageergebnissatz entweder als separate Entitäten oder als einzelne Sammlung speichern. Das Speichern der Ergebnismenge im Cache als gesamte Sammlung ist hier sinnvoll, da jede Änderung der Ergebnismenge eine vollständige Aktualisierung aus der Datenbank erfordern würde.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new FlightRecordsContext()) { var options = new CachingOptions { // To store as collection in cache StoreAs = StoreAs. Collection }; var resultSet = (from flight in context.Flights where flight.Destination == "Hawaii" && flight.Month == "July" select flight).FromCache(options).ToList(); } |
NCache Details Entity Framework Core Cache Konfigurieren Sie EF Core mit NCache
Cache mit allen Referenzdaten vorladen – LoadIntoCache()
Um den Cache als Ihre primäre und zuverlässige Datenquelle für Ihre Referenzdaten zu verwenden, sollten sich Ihre gesamten Referenzdaten zuerst im Cache befinden. Ohne dies können Sie keine korrekten Ergebnisse Ihrer Abfragen für den Cache erwarten, da sich einige der Daten möglicherweise in der Datenbank befinden, während die Abfrage nur den Cache durchsucht.
Laden von Referenzdaten Ihrer EF Core-Anwendung in NCache macht den Anfragezugriff viel schneller. LoadIntoCache()
ruft die Ergebnismenge der LINQ-Abfrage aus der Datenbank ab und lädt die Daten in den Cache.
So sieht es aus, wenn LoadIntoCache()
arbeitet unter der Haube:
Fahren wir mit einem Beispiel eines Produktkatalogs eines E-Shops fort. Das Speichern jedes Produkts als separate Entität macht es für alle Arten von Abfragekombinationen verfügbar und ermöglicht ein noch schnelleres Abrufen eines einzelnen Produkts.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as separate entities in cache StoreAs = StoreAs.SeperateEntities }; var resultSet = (from product in context.Products select product).LoadIntoCache(options); } |
NCache Details Entity Framework Core Cache NCache LINQ-API-Dokumente
Referenzdaten im Cache mit LINQ suchen – FromCacheOnly()
Sie müssen die gesamten Referenzdaten in den Cache laden, wenn Sie LINQ-Abfragen dafür ausführen möchten. Andernfalls sind Ihre LINQ-Abfragen ungültig, da sich einige Daten in der Datenbank befinden und die LINQ-Abfragen die Datenbank in diesem Szenario nicht durchsuchen. Dies ist anders, indem Sie LINQ-Abfragen für Ihre Datenbank durchführen und deren Ergebnismenge zwischenspeichern.
Die folgende Architektur veranschaulicht die Abfrageausführung über EF Core on NCache jetzt:
Beispielsweise ist das Abrufen des Produkts mit einer bestimmten Produkt-ID jetzt viel schneller, da die Reise nur zum Cache führt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
using (var context = new NorthwindContext()) { var options = new CachingOptions { // To store the result as collection in cache StoreAs = StoreAs.Collection }; var resultSet = (from product in context.Products where product.ProductID == MatchingProductID select product).FromCacheOnly(); } |
Verwandte Links: Entity Framework Core Cache NCache LINQ-API-Dokumente
Ändern von EF Core-Entitäten im Cache – GetCache()
Mit EF Core können Sie Entitäten in der Datenbank hinzufügen und aktualisieren. Um also den Cache mit der Datenbank zu synchronisieren und die notwendigen Änderungen an den bereits im Cache vorhandenen Entitäten vorzunehmen, NCache bietet ein Cache-Handle, mit dem Sie Vorgänge zum Hinzufügen, Aktualisieren und Entfernen direkt im Cache ausführen können.
Wenn Sie beispielsweise einen weiteren Kunden in EF Core hinzufügen möchten, nachdem Sie ihn durch Aufrufen in der Datenbank hinzugefügt haben SaveChanges()
Im Datenbankkontext können Sie den Cache-Kontext durch Aufrufen abrufen GetCache()
und Ruf an Insert()
auf der zurückgegebenen Cache-Instanz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
using (var database = new NorthwindContext()) { var cust = new Customers { CustomerId = "HANIH", ContactName = "Hanih Moos", ContactTitle = "Sales Representative", CompanyName = "Blauer See Delikatessen" }; var options = new CachingOptions { QueryIdentifier = new Tag("CustomerEntity"), Priority = Runtime.CacheItemPriority.Default }; Cache cache = database.GetCache(); //get NCache instance cache.Insert(cust, out string cacheKey, options); } |
Verwandte Links: Entity Framework Core Cache NCache Cache-Klassendokumentation Scale EF Core Apps-Webinar
Abschließende Gedanken
Integrieren von Caching in EF Core durch NCache ist einfach und flexibel. NCache bietet ein verteiltes Caching-Framework, das in Umgebungen mit mehreren Servern gut funktioniert, indem es Ihnen 100 % Betriebszeit und Datenzuverlässigkeit durch Replikation bietet, ohne die Leistung des Caches zu beeinträchtigen. Daher Caching in Entity Framework Core mit NCache füllt die Lücken in Leistung und Skalierbarkeit und macht es hocheffizient.
Guter Artikel, normalerweise habe ich den Azure Cache für verwendet Redis to erreicht die überlegene Durchsatz- und Latenzleistung durch das Speichern von Daten im Arbeitsspeicher statt auf der Festplatte. In Bezug auf die Preisgestaltung sehr günstig und in Bezug auf die Leistung bietet es einen großen Mehrwert für die Reaktionszeit.
Jedenfalls eine große Anstrengung, das komplexe Thema in einfachen Worten zu erklären.