Verwenden von .NET-Caching in EF Core durch Erweiterungsmethoden

Aufgezeichnetes Webinar
Ron Hussain und Nick Zulfiqar

Entity Framework (EF) Core ist die neue plattformübergreifende und schlanke Version des beliebten Entity Framework von Microsoft. EF Core ist eine objektrelationale Mapping-Engine für .NET, die den Großteil des Datenzugriffscodes, den Entwickler sonst schreiben, überflüssig macht.

EF Core wird zunehmend in Serveranwendungen mit hoher Transaktionsdichte (ASP.NET, WCF und andere .NET-Server-Apps) verwendet. Und diese Anwendungen benötigen Skalierbarkeit, um große Mengen an Benutzeranfragen ohne Verlangsamung verarbeiten zu können. Die Datenbank wird jedoch zu einem Engpass, und verteiltes Caching muss verwendet werden, um diesen Engpass zu beseitigen.

Erfahren Sie, wie Sie verteilten Cache wie verwenden NCache in Ihrem EF Core-Anwendungen zur Beseitigung von Engpässen bei der Datenbankskalierbarkeit.

Dieses Webinar behandelt (einschließlich praktischer Quellenbeispiele):

  • Einführung in EF Core und seine neuen Features (Modell, Abfrage, Speichern von Daten)
  • Engpässe bei der Datenbankskalierbarkeit in EF Core und wie der verteilte Cache sie löst
  • Verschiedene Nutzungsmöglichkeiten NCache in EF Core (direkte APIs und EF Core-Erweiterungsmethoden)
  • Details zur Verwendung von EF Core-Erweiterungsmethoden für das Caching
  • Wie wird das Caching von Sammlungen und Beziehungen für Referenz- und Transaktionsdaten gehandhabt?
  • Einige wichtige Merkmale eines guten verteilten Caches wie z NCache

EF Core ist eine objektrelationale Mapping-Engine für .NET und .NET Core Anwendungen. Dadurch können Entwickler automatisch Datenzugriffscode generieren, den sie normalerweise selbst schreiben müssten. Ähnlich zu .NET Core, EF Core ist auch plattformübergreifend, und ich meine, dass Sie es unter Windows, Linux und Mac ausführen können, und es wird in der Entwicklergemeinschaft immer beliebter.

In diesem Webinar sprechen wir über Leistungs- und Skalierbarkeitsanforderungen in EF Core-Apps und demonstrieren verschiedene Strategien zum Zwischenspeichern von Referenz- und Transaktionsdaten mithilfe von EF Core-Erweiterungsmethoden. Was sind die Leistungs- und Skalierbarkeitsherausforderungen, denen Sie in einer typischen EF Core-Anwendung gegenüberstehen würden, und dann sprechen wir über verschiedene Optionen zur Verwendung von Caching in Entity Framework Core-Anwendungen.

Ich werde mich hauptsächlich auf Erweiterungsmethoden und EF-Erweiterungsmethoden konzentrieren, die wir für Entity Framework Core-Anwendungen implementiert haben. Ich werde also alle Entity Framework Core-Erweiterungsmethoden von durchgehen NCache und dann sprechen wir über verschiedene Strategien zum Umgang mit Referenzdaten und Transaktionsdaten, wie Nick vorgeschlagen hat. Wir werden auch sehen, wie Sie Daten synchron halten, wenn Daten an zwei verschiedenen Orten vorhanden sind, wenn Sie beginnen, einen verteilten Cache zu verwenden. Das ist es, was wir für das heutige Webinar auf der Tagesordnung haben. Ich fange schnell an. Wir haben viel abzudecken. Es gibt viele praktische Beispiele, die ich zeigen möchte. Also, fangen wir schnell an.

Was ist Entity Framework/EF Core?

Die erste Folie ist also eher eine Einführung in Entity Framework und EF Core.

was-ist-entity-framework-core

EF und EF Core, dies ist eine objektrelationale Mapping-Engine für .NET und .NET core Anwendungen. Die neueste Version von Entity Framework wird als EF Core bezeichnet. Wissen Sie, wir haben kürzlich gesehen, dass EF Core 2.1 zusammen mit veröffentlicht wurde .NET Core 2.1. Wissen Sie, es vereinfacht Ihre Datenbankprogrammierung. Sie wissen, es ermöglicht Ihnen, automatisch Ihr Datenzugriffsmodell zu generieren. Das musst du also nicht selbst schreiben. Es reduziert den dafür notwendigen Entwicklungsaufwand. Sie müssen keinen Persistenzcode schreiben, den Sie normalerweise selbst auf ADO.NET-Ebene schreiben würden, und dann müssen Sie eine Zuordnung zwischen Ihrem Datenmodell und dem Objektmodell haben. Also optimiert es das einfach für Sie.

Es ist also sehr flexibel. Es wird sehr beliebt in der Entwicklergemeinschaft und seiner plattformübergreifenden Plattform und es ist sehr beliebt in .NET und .NET Core Anwendungen, insbesondere hochtransaktionale Anwendungen, die mit einer hohen Anforderungslast umgehen.

Architekturdiagramm von Entity Framework

Dies ist ein Architekturdiagramm von Entity Framework.

Architektur-Diagramm

Sie gilt auch für EF Core. Es gibt nur wenige Unterschiede zwischen EF und EF Core. EF Core ist leichtgewichtig. Es hat einen modularen Ansatz. Es gibt nicht viele, Sie müssen die Installation nicht vollständig durchführen. Sie können einen modularen Ansatz verfolgen. Sie haben es in kleinere Pakete zerlegt, sodass Sie mit dem Paket arbeiten können, an dem Sie interessiert sind.

Sie müssen also keine vollständige Installation durchführen, und sie haben auch .edmx und diese Zuordnungsdateien entfernt. Sie wissen also, die NuGet-Pakete und es gibt einige Befehle, die Sie ausführen und das Modell für Sie generieren, und dann arbeiten Sie einfach mit LINQ to Entities-APIs auf der Anwendungsebene, und der Gesamtansatz bleibt gleich.

Was ist Skalierbarkeit?

In der Regel sprechen wir in einer Ihnen bekannten EF Core-Anwendung über die Anforderungen an Leistung und Skalierbarkeit. Skalierbarkeit ist eine Fähigkeit innerhalb einer Anwendung, mit der Sie die Anzahl der Anforderungen erhöhen können, die diese Anwendung verarbeiten muss. Beispielsweise wächst Ihre Benutzerlast oder die Benutzer, die zur Anforderungslast beitragen, diese Anforderungslast wächst innerhalb einer Anwendung, und wenn Ihre Anwendung langsamer wird, ist diese Anwendung nicht skalierbar.

Also, hohe Leistung unter Lastspitzen, das kategorisieren wir als Skalierbarkeit. Wenn Ihre Anwendung ziemlich gut funktioniert, in einer Sub-Millisekunde, Latenz unter fünf Benutzern, sollte sie die gleiche Art von Leistung, die gleiche Art von Latenz, niedrige Latenz unter, sagen wir, fünftausend Benutzern oder fünfhunderttausend Benutzern und viel haben der Anforderungslast.

Also, hohe Leistung unter hoher Stresslast, unter Spitzenlasten, das kategorisieren wir als Skalierbarkeit. EF Core.

Welche Anwendungen benötigen Skalierbarkeit?

Welche Anwendungen Skalierbarkeit benötigen

Es könnte eine ASP.NET-Webanwendung sein. ASP.NET oder ASP.NET Core die möglicherweise mit vielen Anfragen zu tun haben. Es könnte .NET und sein .NET Core Webservices, wieder auf der Website. Dann haben wir IoT-Serveranwendungen. Auch hier könnte es .NET oder sein .NET Core oder jedes andere allgemeine .NET und .NET Core Anwendungen, die möglicherweise viele Anfragen verarbeiten, oder Benutzer in ihren eigenen Domänen.

Das sind also die Kandidaten für die Skalierbarkeit.

Wo genau liegt das Skalierbarkeitsproblem?

Normalerweise werden EF und EF Core in einer Webfarm bereitgestellt. Wenn es sich um eine Webanwendung handelt, skalieren sie linear. Sie haben keine Skalierbarkeitsprobleme auf der Anwendungsebene, aber sie müssen immer mit einer relationalen Back-End-Datenquelle kommunizieren. Es könnte ein SQL-Server sein. Es könnte Oracle Server oder ein anderer Datenspeicher sein, der von EF oder EF Core unterstützt wird. In EF Core gibt es viele Datenanbieter. Es gibt eine Liste von Anbietern, aus denen Sie auswählen können. Am Ende sprechen Sie also mit einer Datenbank.

Obwohl Ihre Anwendungsschicht gut skaliert werden kann, wird diese Datenspeicherung, die Datenbank, die relationale Datenbank zu einer Quelle von Konflikten. Es ist langsam zu starten, weil es nicht im Speicher ist. Obwohl EF Core einen In-Memory-Datenanbieter entwickelt hat, handelt es sich jedoch um einen InProc-Speicher, der für lokale Tests vorgesehen ist. Das erleichtert Ihre Tests, aber sobald Ihre Anwendung in der Produktion bereitgestellt wird, müssen Sie sich mit einer relationalen Datenbank auseinandersetzen, die langsam ist und nicht skaliert werden kann. Es ist sehr gut für die Speicherung, aber es wird nicht skaliert, wenn Sie diese Skalierbarkeit tatsächlich in Ihrer Anwendung benötigen.

Es ist also eine einzelne Quelle, die unter extremen Belastungen ersticken kann.

Die Lösung

Die Lösung ist sehr einfach, indem Sie anfangen, ein gestörtes Caching-System wie z NCache, für Ihre EF-Kernanwendung verwenden Sie es dann in Kombination mit einer relationalen Datenbank.

Bereitstellungsarchitektur

Hier ist die Bereitstellungsarchitektur von NCache.

Bereitstellungsarchitektur

Zunächst einmal ist es im Speicher. Es ist also im Vergleich superschnell. Dann haben Sie mehrere Server, die die Daten speichern, die Sie normalerweise von einer relationalen Back-End-Datenquelle abrufen können. Sie können es in den Cache bringen und es könnte Ihr ASP.NET oder ASP sein.NET Core Apps, .NET oder .NET, Web Services oder es könnte .NET oder sein .NET Core Serveranwendungen oder jede Art von .NET oder .NET Core Anwendungen oder sogar Java-Anwendungen können dieses verteilte Caching-System nutzen. Es erspart Ihnen teure Reisen zu den relationalen Datenquellen. Es ist im Speicher. Sie können weitere Server hinzufügen und die Kapazität dieses Cache-Clusters linear erweitern.

Es ist also kein Single Point of Failure. Es ist keine Leistung, Engpass. Es ist kein Skalierbarkeitsengpass. Das ist also der empfohlene Ansatz, und darauf werden wir heute ausführlich eingehen, wie man .NET-Caching verwendet und das wird es sein NCache als Beispielprodukt in einer EF Core-Anwendung durch Erweiterungsmethoden.

3 häufig verwendete Anwendungsfälle für verteiltes Caching

Anwendungsfälle für verteilten Cache

Einige häufige Anwendungsfälle von verteiltem Cache. Sie können es für das Daten-Caching verwenden. Sie können direkte API-Aufrufe verwenden. Oder verwenden Sie Entity Framework oder Extension Methods sogar für EF Core Applications und sparen Sie sich Ihre Fahrten zur Datenbank so weit wie möglich.

Dann auf der Website, der Website der Dinge, haben Sie ASP.NET, ASP.NET Core Caching. Dies kann eine Webanwendung oder ein Webdienst sein. Wenn es sich um eine Webanwendung handelt, möchten Sie möglicherweise Sitzungen verwenden. Möglicherweise möchten Sie ASP.NET und ASP verwenden.NET Core SignalR Backplane, Response Caching für einen ASP.NET Core. In ähnlicher Weise ist die IDistributedCache-Schnittstelle verfügbar, um den Zustand anzuzeigen und zwischenzuspeichern. Dies sind alles No-Code-Optionen für Ihre Anwendungen.

Und dann haben Sie leistungsstarkes Pub/Sub-Messaging. Sie können ein Thema haben, das Sie abonnieren, und dann Nachrichten zwischen verschiedenen Anwendungen freigeben. Herausgeber und Abonnenten können sich gegenseitig Nachrichten senden.

Das ist also eine allgemeine Idee. Wir werden uns heute mehr auf das Zwischenspeichern von Daten in einer EF Core-Anwendung konzentrieren, und ich werde Sie durch einfache Schritte führen, um loszulegen, und dann werden wir tatsächlich mehr erweitern und immer mehr Details zu verschiedenen Szenarien teilen.

Fangen wir also schnell damit an.

Zwischenspeichern von APP-Daten: EF Core-Entitäten

Das erste, was ich heute behandeln möchte, ist das Zwischenspeichern von Anwendungsdaten.

what-ef-core-entities-to-cache

Sie haben EF Core-Entitäten. Diese Entitäten müssen also zwischengespeichert werden. Sie sehen also möglicherweise eine einzelne Entität. Zum Beispiel haben Sie eine Anzahl, Summe. Das ist ein Wert oder Sie könnten, Sie führen eine Sortierung durch und erhalten den ersten Kunden, oder die Kriterien sind so, dass es einen einzelnen Kunden, ein einzelnes Produkt, eine einzelne Bestellung zurückgibt. Das ist also eine einzelne Entität, wie wird sie zwischengespeichert? In ähnlicher Weise haben wir Abfrageergebnisse, es könnte sich um eine Entitätssammlung handeln. Es ist also keine einzelne Einheit. Es ist eine Sammlung von Entitäten. Es gibt zwei Möglichkeiten. Sie können die gesamte Sammlung als ein Element im Cache zwischenspeichern, oder Sie können jedes Sammlungselement, jede Entität innerhalb dieser Sammlung separat im verteilten Cache zwischenspeichern.

Caching-Optionen für EF Core-Entitäten

Gehen wir also die Ansätze dazu durch.

efcore-entity-caching-optionen

Wie bereits erwähnt, können Sie direkt verwenden NCache APIs. NCache API ist ein Schlüsselwertspeicher, dem Sie Daten hinzufügen NCache Sie selbst und erhalten dann selbst davon, oder Sie können EF Core-Erweiterungsmethoden verwenden und sich um diese einzelne Entität und Entitätssammlung kümmern.

Also, lassen Sie mich Ihnen zuerst die direkte zeigen NCache API-Ansatz, der für alle Arten von Anwendungen üblich ist. Sie können es in EF Core verwenden. Sie können es in normalen EF- oder anderen .NET-Anwendungen verwenden, und dann werde ich über EF Core-Erweiterungsmethoden sprechen, die speziell für Ihre EF-Kernanwendungen entwickelt wurden, und das macht Ihr Leben viel einfacher, da viele Dinge automatisch erledigt werden für Sie und Sie müssen diese Erweiterungsmethode nur zusammen mit Ihren Abfragen aufrufen. Ich zeige Ihnen also beide Ansätze nacheinander, und dann konzentrieren wir uns in Zukunft mehr auf die Erweiterungsmethoden.

Zwischenspeichern einer einzelnen EF Core-Entität: NCache Direkte APIs

Unser erstes Beispiel ist also das Zwischenspeichern einer einzelnen EF Core-Entität.

Customers GetCustomer (string CustomerId)
{
	string key = "Customer:CustomerId:" + CustomerId;
	Customers customer = (Customers)_cache.Get(key);
	
	if (customer != null)
	{
		return customer;
	}
	else
	{
			customer = (from cust in database.Customers
					where cust.CustomerId == CustomerId
					select cust).FirstOrDefault();
                    _cache.Insert(key, customer);
	
		return customer;
}
}

Wir haben hier eine GetCustomer-Methode. Das zeige ich Ihnen anhand einer von mir dafür formulierten Musteranwendung. Das ist also unsere erste Methode. Ich hoffe, Sie können meinen Bildschirm sehen. Also haben wir Get Customer. Es nimmt unsere Kunden-ID und die Idee hier ist, dass dies eine einzelne Entität zurückgibt, richtig. Typischerweise besteht die Herausforderung bei der direkten API also darin, dass Sie etwas berücksichtigen oder selbst implementieren müssen.

Zuallererst benötigen Sie einen Schlüssel, und dieser Schlüssel ist etwas, mit dem Sie eine Entität darin identifizieren NCache und Sie müssen alle Schlüssel im gleichen Format beibehalten. Sie können sich ein Beispielformat ausdenken, wie es auf dem Bildschirm angezeigt wird. Es gibt ein Kundenschlüsselwort und dann die Kunden-ID und einen Laufzeitparameter der Kunden-ID, der den Cache-Schlüssel bildet.

In NCache alles wird in einem Schlüssel-Wert-Paar gespeichert. Schlüssel ist ein Zeichenfolgenschlüssel und Wert ist ein .NET-zugelassenes Objekt, und es könnte auch jede EF Core-Entität sein, aber Sie formulieren den Schlüssel und verwenden dann die Entität als Objekt, in dem gespeichert werden soll NCache. Jetzt überprüfen Sie zuerst, ob dieser Schlüssel bereits im Cache vorhanden ist oder nicht, indem Sie cache.Get aufrufen, und ob Sie diesen Kunden direkt aus dem Cache erhalten, und dies ist ein direkter NCache API cache.Get, Sie geben den Schlüssel weiter und wenn Sie diesen Kunden erhalten, geben Sie den Code von hier zurück, wenn er nicht null ist. Aber wenn es zum Beispiel null ist, führen Sie diese Abfrage zum allerersten Mal aus, richtig, es ist noch nichts im Cache. In diesem Fall würden Sie also gegen Entity Framework Core die LINQ-API gegen die Datenbank ausführen und dann diesen Kunden aus der Datenbank abrufen und auch cache.Insert aufrufen, ihn mit demselben Schlüssel speichern, den Sie formuliert haben, und dann ist der Kunde der Entität, die Sie hinzufügen möchten, und geben Sie sie dann auch zurück.

So würden Sie also tatsächlich mit einer einzelnen Entität umgehen, die die richtige API verwendet.

Zwischenspeichern der EF Core-Entitätssammlung: NCache Direkte APIs

Dann die Sammlung. Sammlung kann entweder eine Sammlung als einzelnes Objekt oder wiederum als einzelne Entität sein.

List<Customers> GetCustomersByCity (string CustomerCity)
{
	string key = "Customers:City = " + CustomerCity;
	List<Customers> custList;
    custList = (List<Customers>)_cache.Get(key);

	if (custList != null)
	{
		return custList;
	}
	else
	{
		custList = (from cust in database.Customers
					where cust.City == CustomerCity
					select cust).ToList();

		_cache.Insert(key, custList);
		return custList;
	}
} 

Jeder Sammlungseintrag könnte eine einzelne Entität sein, die dem Cache separat hinzugefügt wird. Dafür müssen wir also Kunden nach Stadt bekommen, also ist das die nächste Methode. Es gibt eine Liste von Kunden zurück. Auch hier wird die Kundenstadt als Kriterium übergeben. Auch hier formulieren Sie einen Schlüssel. Auch dies ist, wie Sie wissen, dies stellt eine Sammlung von Kunden dar, die auf der Stadt basieren, und dann könnte diese Stadt hier ein Laufzeitparameter sein. New York, Paris, London und dann holst du zuerst per Cache-Aufruf. Hole selbst aus dem Cache und dann schaust du, ob es im Cache existiert, wenn ja, kehrst du von hier zurück, wenn nicht, speicherst du es einfach als Einzelsammlung.

Diese Kundenliste wird also als ein Objekt gespeichert. Eine andere Alternative könnte sein, dass Sie die Liste der einzelnen Kunden in Kundenentitäten durchlaufen und den Cache aufrufen. Fügen Sie sie wie hier gezeigt einzeln ein. Recht? Also einzelne Entitäten und Entitätssammlungen, die direkt verwenden NCache API, wie sie mit diesen Ansätzen zwischengespeichert werden. Jetzt haben wir direkte APIs behandelt. Dies ist etwas, das Sie in jeder Anwendung verwenden können.

Zwischenspeichern einer einzelnen EF Core-Entität: EF Core-Erweiterungsmethoden

Konzentrieren wir uns auf die Kernerweiterungsmethoden von Entity Framework. Dasselbe gilt für eine einzelne Entität und eine Entitätssammlung, die die NCache Erweiterungsmethoden. Also werde ich FromCache vorstellen.

Customers GetCustomer (string CustomerId)
{
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.SeperateEntities
	};
	
	Customers customer  = (from cust in database.Customers
							where cust.CustomerId == CustomerId
							select cust).FromCache(out string cacheKey,
                            options).FirstOrDefault();
	return customer;
}

Das ist unsere erste Erweiterungsmethode und übrigens, damit diese Erweiterungsmethode verwendet werden kann, müssen Sie sie zuerst vorstellen NCache NuGet-Paket Entity Framework Kern-NuGet-Paket in Ihrer Anwendung. Das ist also ein Muss. Wenn Sie zu den installierten gehen, ist dies eine Alachisoft.NCache.EFCore NuGet-Paket. Das müssen Sie in Ihre Anwendung einführen, das ist eins, und danach müssen Sie nur noch den Kontext öffnen. Also innerhalb des Kontextes rufst du einfach an NCacheConfiguration.Configure und es nimmt eine Cache-ID, die ich aus App-Einstellungen lese, und dann nimmt es auch den Typ von, wenn Sie Abhängigkeiten verwenden, ist dies eine erweiterte Funktion innerhalb der Entity Framework Core-Erweiterungsmethoden. Sie müssen den Typ der Datenquelle angeben.

Aber sobald Sie angerufen haben NCache Configure-Methode, gibt es verschiedene Dinge, die diese Methode anfordert. Sie können auch einen Logger einrichten, aber das war's. Damit können Sie mit dem Anrufen beginnen NCache, EF Core-Erweiterungsmethoden in Ihrer Anwendung.

Zwischenspeichern der EF Core-Entitätssammlung: EF Core-Erweiterungsmethoden

Also, wie Sie wissen, Methode, aber dieses Mal erhalten Sie Kunden durch Erweiterungsmethoden.

List<Customers> GetCustomersByCity (string CustomerCity)
{
	List<Customers> custList; 
	CachingOptions options = new CachingOptions
	{	
		StoreAs = StoreAs.Collection
	};
	custList = (from cust in database.Customers
				where cust.City == CustomerCity
				select cust).FromCache(out string cacheKey,
                options).ToList();
	return custList;	
}

Es wird alles viel einfacher machen. Sie müssen die Daten im Cache nicht selbst überprüfen und Sie müssen insert nicht explizit selbst aufrufen und vor allem müssen Sie nicht aufrufen, Sie müssen den Cache-Schlüssel nicht selbst erstellen. Dies ist im Rahmen der Implementierung dieses 'FromCache' vollständig automatisiert.

Nun, vom Standpunkt des Verhaltens aus gesehen ist dies genau das, was wir zuvor gezeigt haben. FromCache nimmt zunächst eine Caching-Option, die Optionen und 'cacheKey' ist eine Ausgangsreferenz. Der Cache-Schlüssel wird also automatisch hinter den Kulissen für Sie erstellt. Sie müssen nur neben Ihrer Abfrage als Erweiterungsmethode aus dem Cache aufrufen, und Sie geben einfach die Optionen zum Speichern weiter, wenn es immer eine Sammlung zurückgibt, richtig. In diesem Fall können Sie also entweder eine separate Entität oder eine separate Sammlung auswählen, richtig. Es könnte sich also um eine Sammlung von Entitäten oder um separate Entitäten aus dieser Sammlung handeln.

FromCache funktioniert also so, dass, wenn eine Entität oder eine Abfrage, die Sie ausgeführt haben, und die resultierenden Entitäten bereits im Cache sind, es sie bekommen würde NCache automatisch. Aber wenn sie sich in diesem Fall nicht im Cache befinden, würde es diese Abfrage automatisch für die Datenbank ausführen und die Ergebnismenge wird zurückgegeben und gleichzeitig auch zwischengespeichert, und wir haben auch den Datenbankkontext für nachfolgende Aufrufe angehängt.

Wenn Sie beispielsweise FromCache zum ersten Mal aufrufen, wird es zwischengespeichert. Wenn dieselbe Abfrage das nächste Mal ausgeführt wird, wird sie offensichtlich für den Cache ausgeführt, aber nicht für die Datenbank. Diesmal Ihr Kontext, falls dieser zuvor verworfen wurde und Sie für diese Anfrage das using-Konstrukt für diese Angelegenheit verwendet haben, wenn Sie Änderungen an den Entitäten vornehmen, die diese Änderungen auch an den Kontext anhängen. Und wenn Sie Save Changes aufrufen, werden alle Änderungen, die an den aus dem Cache abgerufenen Entitäten vorgenommen wurden, tatsächlich auf die Datenbank angewendet. Das ist also wieder ein leicht fortgeschrittenes Konzept. Ich werde später noch etwas mehr Zeit damit verbringen, aber nur um Sie wissen zu lassen, die Methode from cache funktioniert so, dass etwas, das sich nicht im Cache befindet, aus der Datenbank abgerufen und zwischengespeichert wird. Wenn jedoch bereits etwas im Cache verfügbar ist, wird es nur von dort zurückgegeben. Dies automatisiert also den gesamten, direkten API-Ansatz für Sie, erstellt aber auch die Schlüssel. Es organisiert die Daten auch automatisch in einer separaten Entität oder einer separaten Sammlung, und Sie müssen nur aus dem Cache aufrufen und den Ausgangsschlüssel und die Optionen weitergeben.

Gleicher Fall für Sammlungen. Holen Sie sich für eine Sammlung Kunden nach Stadt. Es würde als Sammlung gespeichert und dann können Sie wieder aus dem Cache aufrufen. So einfach ist der Einstieg in Entity Framework Core-Erweiterungsmethoden.

Welche Daten sollen in EF Core zwischengespeichert werden?

Unser nächstes Thema dreht sich um, unser nächstes Thema dreht sich wieder um die Verwendung, die Art der Daten im Cache.

welche-daten-in-efcore-zwischenzuspeichern

Sie könnten entweder Referenzdaten oder Transaktionsdaten haben. Gibt es eine Frage?

Ja, Ron, ich habe hier eine Frage. Erweiterungsmethoden von NCache mit EF Core arbeiten, empfehlen Sie .NET Core 2.0 Framework oder a .NET Framework?

In Ordnung. Da also EF Core selbst sowohl unter .NET als auch in ausgeführt werden kann .NET Core, also sehr flexibel. NCache Erweiterungsmethoden würden absolut gut funktionieren. Tatsächlich führe ich diese Beispielanwendung aus .NET framework 4.6.1 und ich habe eine andere Beispielanwendung, an der ich glaube, dass sie funktioniert .NET core 2.0. Das ist also .NET Core 2.0. Es funktioniert also mit beiden .NET frameworks und im Grunde ist es bevorzugt, dass Sie verwenden .NET Core, aber es ist flexibel. Es wird für beide funktionieren. Ich hoffe, das beantwortet Ihre Frage.

Fahren Sie fort, das nächste Segment in der Präsentation ist, wenn Sie anfangen, das Caching richtig zu planen, und offensichtlich machen die Kernerweiterungsmethoden des Entity Frameworks Ihr Leben in Bezug auf das Caching viel einfacher. Viele Dinge werden also automatisch erledigt. Die nächste Frage ist also, welche Daten zwischengespeichert werden sollen, richtig?

Also habe ich Daten in zwei Kategorien eingeteilt. Wir haben Referenzdaten. Das sind Nachschlagedaten und dann haben wir unsere Transaktionsdaten, die dynamisch erstellt werden und sich sehr häufig ändern. Referenzdaten, ein schnelles Beispiel wären Produkte, Mitarbeiter. Es sind keine 100 % statischen Daten, aber etwas, das sich nicht so häufig ändert. Aber es ändert sich, die Häufigkeit der Änderung ist nicht so groß. Und dafür sollten Sie planen, ganze Referenzdaten zwischenzuspeichern. Alle Referenzdaten sollten unbedingt zwischengespeichert werden, und dann sind Transaktionsdaten dynamisch erstellte Daten. Wie Bestellungen, Konten, einige Workflow-Verarbeitungen zu einer bestimmten Sammlung von Daten und der Umfang dieser Sammlung gilt nur für diesen Workflow. Sobald dieser Workflow die Ausführung abgeschlossen hat, werden diese Daten nicht mehr benötigt und diese Daten können sich auch sehr häufig ändern. So sehr, dass es sich innerhalb von fünf Minuten ändern kann. Während Referenzdaten normalerweise Nachschlagedaten sind, die sich zwischen Stunden ändern können. 1 bis 2 Stunden, 5 bis 10 Stunden oder sogar in Tagen.

Wir haben hier eine Frage. Wie würden Sie dieses zwischengespeicherte Objekt identifizieren, wenn Sie es mit EF-Erweiterungen abrufen, genauso wie automatisch erstellte Schlüssel? Eigentlich einen bestimmten Schlüssel nicht abrufen, sondern löschen?

In Ordnung. Wir haben also eine Erweiterungsmethode zum Abrufen. Die Erweiterungsmethode wird zusammen mit EF Core ausgeführt. Das Rückgabeobjekt würde also in denselben Zeilen identifiziert, wie es Ihre LINQ-Abfrage identifizieren würde. Ich denke, die Frage konzentriert sich mehr darauf, was passiert, wenn Sie planen, die Datensätze zu aktualisieren, und dafür haben wir eine Reihe von APIs. Wir geben Ihnen eine Methode, mit der Sie einen Schlüssel für eine Entität generieren können. Es gibt eine Schlüsselgenerierungsmethode, die wir öffentlich gemacht haben. Bevor Sie also direkt eine Änderung im Cache vornehmen, gehe ich davon aus, dass sich diese Frage mehr darauf konzentriert, etwas im Cache zu löschen oder etwas im Cache zu aktualisieren oder explizit etwas im Cache zu entfernen oder hinzuzufügen. Wir haben die Cache-Klasse offengelegt, die ich Ihnen gleich zeigen werde, und dann gibt es eine Schlüsselgenerierung. Auch hier übergeben Sie einen String und verwenden die out-Referenz und übergeben auch die Entität. Also verwenden wir für diese Entität denselben Ansatz und geben Ihnen einen Schlüssel, und mit diesem Schlüssel können Sie das Objekt dieser Entität identifizieren. Wenn es im Cache vorhanden ist, sollten Sie in der Lage sein, es zu aktualisieren und zu entfernen.

Ich denke, gegen Ende werde ich Ihnen ein Beispiel zeigen, wie man das erreicht, aber nur um Sie wissen zu lassen, es gibt Methoden, denen wir ausgesetzt waren, um den Schlüssel herauszuholen NCache auch. Ich hoffe, das beantwortet Ihre Frage.

Zwischenspeichern von Referenzdaten in EF Core

Weiter gehts. Wir haben also über Nachschlagedaten und dann über dynamisch erstellte Daten gesprochen.

Caching-Referenzdaten-in-ef-core

Also werde ich nacheinander verschiedene Ansätze durchgehen, um damit umzugehen. Zunächst sprechen wir also über Referenzdaten in EF Core. Wie ich bereits erwähnt habe, handelt es sich normalerweise um Lookup-Daten. Es gibt also zwei Dinge, die Sie unbedingt tun sollten. Sie sollten zuerst ganze Daten, ganze Referenzdaten in den Cache laden, und die Motivation hier ist, dass sich diese Daten nicht so häufig ändern. Es ist ein Produktkatalog in einem EF, in einer E-Commerce-Anwendung. Es gibt einige Rabatte auf bestimmte Produkte, solange dieser Rabatt aktiviert ist, sagen wir für drei Tage. Diese Produkte ändern sich möglicherweise nicht, daher ist es besser, alle diese Produkte zwischenzuspeichern NCache und ersparen Sie sich Ihre teuren Datenbankreisen, um dies soweit wie möglich zu tun. 100%, Daten sollten in den Cache geladen werden. Damit Sie nicht zur Datenquelle zurückkehren und diese dann immer als separate Entitäten zwischenspeichern müssen. Wieso den? Aufgrund von Produkten kann der gesamte Datensatz Tausende und Abertausende von Produkten umfassen.

Nehmen wir an, die Northwind-Datenbank. Die Produkte können zwischen 50,000 und 100,000 Produkten liegen. Aber Sie brauchen vielleicht nur, sagen wir, 10 davon oder 100 davon für eine bestimmte Anfrage. Wenn Sie sie also als separate Entitäten speichern, können Sie LINQ-Abfragen ausführen. NCache unterstützt auch LINQ on NCache direkt. Sie können also LINQ ausführen, um die Teilmenge der Daten abzurufen, aus denen die Teilmenge der Entitäten abgefragt wird NCache .

Dies sind also zwei Regeln, die Sie unbedingt befolgen sollten, und ich habe ein Beispiel, und hier stelle ich unsere zweite Erweiterungsmethode vor, die Laden in den Cache heißt.

Zwischenspeichern von Referenzdaten in EF Core: Preload-Cache

Nun, das funktioniert so und ist nur für Referenzdaten gedacht. Dies ist ein Pre-Loader in den Cache.

void LoadAllProducts (NorthwindContext database)
{
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.SeperateEntities,
	};	
	
	// Loads all products into cache as individual entities
	var res = (from products in database.Products select
    products).LoadIntoCache(options).ToList();
}

Die Motivation hier ist also, dass Sie diese Methode aufrufen sollten, sagen wir Alle Produkte laden, und Sie sollten sicherstellen, dass Sie sie als separate Entitäten speichern, und Sie sollten eine Abfrage ausführen, die besagt, dass Produkte in der Datenbank Produkte und Produkte auswählen . Sie geben also keine Kriterien an, was bedeutet, dass dies alle 60,000 Produkte in den Cache laden würde, und dann verwenden Sie LoadIntoCache, richtig. Wenn Sie separate Entitäten sagen, müssen Sie diese Option nur weitergeben, und wir erstellen einfach eine separate Entität für jedes Produkt im Cache, und dies ist wieder ein Preloader, richtig. Sie sollten dies vorladen..

Es gibt zwei Möglichkeiten. Sie können dafür eine separate Anwendung ausführen, die das Vorladen des Cache übernehmen kann. Dies könnte der Anwendungsstart oder eine separate Anwendung oder eine Cache-Loader-Implementierung sein NCache auch. Es gibt einen Cache-Loader und in zukünftigen Versionen wurde auch an einem Cache-Refresher gearbeitet.

Die Verantwortung des Cache Loaders besteht darin, dass er tatsächlich beim Start Ihres Caches ausgeführt wird und dann sicherstellt, dass alle Daten, die Sie in den Cache laden möchten, als Teil davon geladen werden. Es ist Ihre Implementierung, aber NCache nennt es einfach. Aber wie ich bereits erwähnt habe, können Sie sich die Methode so ausdenken und sicherstellen, dass Sie sie einmal beim Start Ihrer Anwendung aufrufen oder eine separate Anwendung dies tun und diese Daten für alle Ihre Anwendungsinstanzen freigeben.

Nun, wenn dies erledigt ist, wie man Daten aus dem Cache abfragt und an diesem Punkt. Ich werde meine dritte Erweiterungsmethode vorstellen, nämlich From Cache Only.

Zwischenspeichern von Referenzdaten in EF Core: Suche nach Referenzdaten nur aus dem Cache
List<Products> FindDiscontinuedProducts (NorthwindContext database)
{
	//Fetch discontinued products only out of all products 
	List<Products> discontinuedProducts;
	
	discontinuedProducts = (from product in database.Products 
   	 where product.Discontinued == true
   	 select product).FromCacheOnly().ToList();
	
	return discontinuedProducts;

}

Die erste Erweiterungsmethode war also FromCache, was bedeutet, wenn sich etwas im Cache befindet, holen Sie es von dort. Wenn dies nicht der Fall ist, gehen Sie automatisch zur Datenbank und rufen Sie sie ab. LoadIntoCache wird immer gegen die Datenbank ausgeführt. Es wird nie gegen den Cache ausgeführt, obwohl es zurückkehrt, aber dies muss unbedingt von der Datenbank zurückgegeben werden, damit der Datensatz aktualisiert wird. Neue Daten werden geladen und dann auch zwischengespeichert, und dann wird FromCacheOnly nur ausgeführt NCache weil diese nur für die Referenzdaten ausgelegt ist. Für Referenzdaten würden Sie also eine Kombination aus LoadIntoCache verwenden. Damit Daten alle Datensätze als separate Entitäten im Cache vorhanden sind, würden Sie dann FromCacheOnly aufrufen, damit nur der Datensatz, an dem Sie interessiert sind, in diesem Fall nur aus dem Cache geholte abgekündigte Produkte hat. Sie müssen also überhaupt nicht zur Datenbank gehen. Ich werde darüber sprechen, wie diese Daten aktuell bleiben, wenn sich Daten in der Datenbank ändern. Also, ich hoffe, das macht Sinn. Lassen Sie mich Ihnen dieses Beispiel hier zeigen.

Also rufe ich diese Methode genau hier auf und gebe dann eine Liste von Produkten und eingestellten Produkten zurück, indem ich eine einfache EF verwende, die LINQ-API direkt an NCache Entitäten.

Dies würde also überhaupt nicht gegen die Datenbank ausgeführt werden. Dies würde nur für den Cache ausgeführt, da ich die Erweiterungsmethode FromCacheOnly verwende. Ich hoffe das hilft. Wir haben drei Erweiterungsmethoden behandelt, FromCache, das eher ein Anwendungsfall für Transaktionsdaten ist, und dann haben wir LoadIntoCache und FromCacheOnly behandelt. Für Referenzdaten sollten Sie sich darauf konzentrieren, vollständige Daten mit LoadIntoCache und dann separate Entitäten zu verwenden, und dann sollten Sie für Abfragen FromCacheOnly verwenden.

Zwischenspeichern von Transaktionsdaten in EF Core

Als Nächstes sprechen wir über Transaktionsdaten und dann darüber, wie diese Daten sowohl für Referenz- als auch für Transaktionszwecke aktuell gehalten werden können.

Caching-Transaktionsdaten-in-efcore

Nun sind Transaktionsdaten normalerweise ein Arbeitssatz. Ich habe bereits erwähnt, dass es sich um dynamisch erstellte Daten handelt. Es wird nur für einen aktuellen Benutzer, eine aktuelle Anfrage oder einen Workflow benötigt, und sobald dies ausgeführt wird, benötigen Sie diese Daten möglicherweise nicht mehr. Es besteht also die Möglichkeit, dass nur die Instanz der Anwendung, die diese Daten tatsächlich abruft, dass diese Entitäten nur von dieser Instanz der Anwendung benötigt werden. Es macht also keinen Sinn, alle Ihre Transaktionsdaten im Cache zu speichern. Es ist keine Voraussetzung. Sie sollten nur den Arbeitssatz zwischenspeichern. Das ist also Schritt Nummer eins. Daher sollten Sie Abfrageergebnisse zwischenspeichern. Sie können am einfachsten auf Entitäten zugreifen, und im zweiten Schritt gibt es zwei Optionen 2a, 2b.

Als Sammlung abrufen und zwischenspeichern

Sie können Ihre Transaktionsdaten als gesamte Sammlung zwischenspeichern. Das ist ein bevorzugter Ansatz.

List<Orders> GetCustomerOrders (string CustomerID)
{
	CachingOptions options = new CachingOptions	
	{
		StoreAs = StoreAs = StoreAs.Collection,
	};

	//Fetch from cache. If not found then fetch from DB.
	orderList = (from customerOrder in database.Orders 
				where customerOrder.Customer.CustomerId==CustomerID 
				select customerOrder)
				.FromCache(out string cacheKey, options).ToList();
	
	return orderList;
}

Normalerweise braucht man immer die gesamte Sammlung, weil man daran arbeitet und dann kann man auch getrennte Entitäten speichern. Es liegt ganz bei Ihnen, und dies gilt für ein Szenario, in dem Sie eine Sammlung zwar zwischengespeichert haben, sie aber dennoch als separate Entitäten speichern, da Sie möglicherweise nur zwei oder drei Entitäten aus dieser Sammlung benötigen. Daher ist es besser, beim Speichern der Sammlungen einen granularen Ansatz zu verfolgen, und wir haben GetCustomerOrders. Bestellungen sind ziemlich transaktionale Daten. Es muss eine Verarbeitungseinheit geben, die bestimmte Aufträge bearbeitet, und es besteht die Möglichkeit, dass jeder Workflow, der dies tut, seinen eigenen Satz von Aufträgen hat.

Also, ich zeige Ihnen dieses Beispiel ganz schnell. Es funktioniert also so, dass es viele Caching-Optionen bietet. Gehen wir hier nicht wirklich ins Detail. Als Sammlung speichern. So entscheiden Sie sich dafür, es als Sammlung zu speichern, und dann verwende ich FromCacheOnly. Der Grund für Transaktionsdaten ist, dass ich FromCache verwende, da Daten im Cache vorhanden sein können und wenn dies die gesamte Sammlung betrifft, muss ich sie nur verwenden. Ich muss nicht in die Datenbank gehen. Aber wenn es nicht im Cache vorhanden ist und sich diese Daten auch sehr häufig ändern, haben wir auch ein Ablaufdatum dafür eingerichtet, sagen wir 30 Sekunden, also sollten Sie vielleicht zur Datenbank zurückkehren. Wenn Sie FromCacheOnly verwenden, können Sie einen Nullwert zurückgeben, wenn er nicht im Cache vorhanden ist, wenn er bereits abgelaufen ist.

Verwenden Sie also für Transaktionsdaten die Erweiterungsmethode From Cache, für Referenzdaten verwenden Sie LoadIntoCache zum Vorladen und verwenden Sie dann FromCacheOnly. Das ist also der Ansatz, um es anzugehen.

Abrufen und Zwischenspeichern als separate Entitäten

Für separate Entitäten müssen Sie nur speichern, rufen Sie dies auf.

List<Orders> GetCustomerOrders (string CustomerID)
{
	CachingOptions options = new CachingOptions	
	{
		StoreAs = StoreAs.SeperateEntities
	};

	//Fetch from cache. If not found then fetch from DB.
	orderList = (from customerOrder in database.Orders 
				where customerOrder.Customer.CustomerId==CustomerID 
				select customerOrder)
				.FromCache(out string cacheKey, options).ToList();
	return orderList;
}

Lassen Sie mich dies einfach verwenden und anstatt eine separate Entität zu verwenden, sagen Sie einfach: (Ich muss kommentieren, hätte kommentieren sollen) Richtig, als separate Entitäten speichern. Das ist alles, was Sie tun müssen.

Also, Ron, während du das durchgehst, gibt es eine Frage. Gibt es im vorherigen Beispiel, dem Abfragen von Referenzdaten, eine Indizierung? Denn nur das würde man auf der Datenbank machen….

Absolut, das ist eine sehr gute Frage und für Referenzdaten, da diese LINQ-Abfrage nur gegen Cache ausgeführt wird, erfordert diese LINQ-Abfrage, dass Ihr Produkt und das Attribut, entlang dem Sie die LINQ-Abfrage ausführen, indiziert sind, und das bin ich tatsächlich Verwenden von Indexdaten und es ist sehr einfach zu indizieren, Sie müssen nur den Typ und das Modell angeben und dann die Attribute angeben, die Sie indizieren müssen. Dies sind also Indexattribute, und wir führen tatsächlich Abfragen für Indexattribute aus. Ich hoffe, das beantwortet Ihre Frage.

Cache frisch halten

Ich werde ganz schnell zu unserem praktischen Teil übergehen, Ihnen das eigentliche Produkt in Aktion zeigen und dann das wichtigste Segment dieses Webinars, wie man Cache-Daten im Vergleich zur Datenbank und auch in Bezug auf Referenzdaten aktuell hält und Transaktionsdaten.

Okay, also werde ich ein neues Projekt eröffnen. Okay, also, der praktische Demo-Teil. Ich zeige Ihnen schnell das eigentliche Produkt in Aktion, damit Sie wissen, wie ein verteiltes Caching aussieht, und dann führen wir die Anwendung dagegen aus, und ich zeige Ihnen, wie Sie es behalten es frisch, die Daten und der Cache so frisch.

Ich habe bereits installiert NCache auf zwei meiner Boxen 107 und 108. Ich werde diese als meine Cache-Server und meine persönliche Maschine hier verwenden, mein Laptop wird als Client fungieren.

Also starte ich erstmal die NCache Manager-Tool, das mit installiert wird NCache und ich werde einen Cache erstellen, sagen wir, nennen wir ihn EF Core-Cache. Ich verwende zwei Server. Behalten Sie Partitionsrepliken als unsere Caching-Topologie und dann die Option für die asynchrone Replikation bei, da dies schneller ist, und hier habe ich die Server angegeben, die meinen Cache hosten werden. Ich habe also zwei Server, Demo 1 und Demo 2 und einen TCP/IP-Port für die Kommunikation. Alles wird von TCP/IP gesteuert, was die Kommunikation zwischen Servern und Clients betrifft.

Größe des Caches, basierend auf den Daten, die Sie zwischenspeichern möchten. Wenn es sich um Referenzdaten handelt, sollten Sie berücksichtigen, dass Sie alle Produkte, alle Kunden laden. Wenn es sich um Transaktionsdaten handelt, müssen Sie in ähnlicher Weise den Arbeitssatz und etwas mehr Platz dafür berücksichtigen. Halten Sie alles einfach, wählen Sie Finish und das war's. So einfach ist der Einstieg NCache und einen Cache konfigurieren.

Da ich Anwendungen auf meinem Computer ausführe, muss ich nur meine Box als Client-Computer hinzufügen. Ich kann diesen Cache-Cluster starten und testen und danach kann ich die Beispielanwendung ausführen, um eine Verbindung damit herzustellen. So einfach ist es also. Wir haben einen Stammgast NCache Webinar zu Architektur und Skalierung von .NET-Apps, in dem wir ausführlich über diese Konfigurationen sprechen. Wenn Sie also Fragen haben, sollten Sie sich auch diese Webinare ansehen.

Ich werde Ihnen auch einige Überwachungsaspekte zeigen. Statistikfenster und dann werde ich öffnen NCache Monitoring-Tool, damit ich die Stresstest-Tool-Anwendung ausführen kann, die mit installiert ist NCache und Dinge in Aktion sehen. Dies ist also ein Stresstest-Tool. Ich werde es dagegen ausführen, weil meine Box ein Client ist, also kann ich einfach den Namen angeben und es sollte eine Verbindung zu diesem herstellen und ich sollte in der Lage sein, eine Dummy-Last auf meinem Cache-Cluster zu simulieren, los geht's. Die Cache-Größe wächst, Elemente werden hinzugefügt und Anfragen pro Sekunde laden zeigt auch Aktivität auf beiden Servern und dann dieses Überwachungstool, ich denke, es braucht Zeit, es erstellt ein Dashboard.

Stress-Test-Tool

Lassen Sie es also laufen und lassen Sie mich in der Zwischenzeit eine weitere Instanz dieses Tools vom Server selbst ausführen. Mein Fehler. In Ordnung, Sie können also sehen, wie die erhöhte Anzahl von Anfragen pro Sekunde zunimmt. Aus irgendeinem Grund dauert es einige Zeit, das Dashboard, das Überwachungstool, zu laden. Ich denke, ich werde es gleich hier lassen, sobald es zurückkommt, werde ich Ihnen die Überwachungsdetails dieses Tools zeigen.

Cache frisch halten: Referenzdaten

In Ordnung, unser nächstes Segment in diesem Webinar hält Cache-Daten in einer Entity Framework Core-Anwendung aktuell, und dafür werde ich wieder Referenzdaten und Beispiel für Transaktionsdaten verwenden. Beginnen wir also mit Referenzdaten.

Keep-Cache-Referenzdaten-aktuell

Wir haben bereits festgestellt, dass Sie zum Zwischenspeichern von Referenzdaten den gesamten Datensatz im Cache zwischenspeichern sollten. Wenn Sie beispielsweise Produkte haben, sollten Sie alle Produkte in den Cache laden und sie dann als separate Entitäten laden. Was ist dann das Problem dabei?

Da Referenzdaten, die gesamten Referenzdaten im Cache und dann verwenden Sie nur den Cache mit der FromCacheOnly-Erweiterungsmethode. Jetzt möchten Sie sich keinen Teildatensatz aus dem Cache leisten. Wenn es sich um eingestellte Produkte handelt oder Sie einige Kriterien ausführen, möchten Sie alle diese Produkte im Cache haben. Es besteht jedoch die Möglichkeit, dass sich diese Produkte tatsächlich in der Datenbank ändern. Jetzt existieren Daten an zwei verschiedenen Stellen. Sie haben eine Datenbank, die Ihre Masterkopie ist, und obwohl Sie die gesamten Daten in den Cache geladen haben, besteht immer noch die Möglichkeit, dass die Datenbank außerhalb des Bereichs Ihrer Anwendungen aktualisiert wird.

Um die Cache-Daten aktuell zu halten, müssen Sie also sicherstellen, dass Sie über einen Mechanismus verfügen, der die Daten und den Cache automatisch aktualisiert, und dafür haben wir zwei Optionen. Option Nummer eins ist, dass Sie das Ablaufdatum verwenden.

void LoadAllProducts (NorthwindContext database)
{
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.SeperateEntities,
	};
	
	options.SetAbsoluteExpiration(DateTime.Now.AddHours(10)); 	
    options.SetResyncProviderName("MyEFCoreResyncProvider");
	
	// Load all products into cache with Expiration and Auto-Reload
	var res = (from products in database.Products select
    products).LoadIntoCache(options).ToList();

}

Dies ist ein zeitbasierter Ablauf und wenn Sie es dann verwechseln, verwenden Sie es zusätzlich mit der Funktion zum automatischen Neuladen. NCache Mit der Ablauffunktion können Sie Daten verfallen lassen, Daten nach dem angegebenen Zeitraum entfernen, sagen wir 5 Stunden, 10 Stunden und mit Referenzdaten, da es sich um lange laufende Daten handelt, es handelt sich um Nachschlagedaten, Stammdaten, sodass die Änderungshäufigkeit nicht der Fall ist So großartig, dass Sie eine angenehme Anzahl von Stunden finden können, oder Sie wissen schon, es könnten 5 Stunden, 10 Stunden, 24 Stunden sein. Auf dieser Grundlage können Sie also eine Ablaufzeit festlegen. Aber wie bereits erwähnt, möchten Sie diese Daten nicht wirklich verlieren oder aus dem Cache entfernen.

Was Sie wirklich brauchen, ist, dass die Daten, die geändert werden, z. B. 10 Produkte, basierend auf dem von Ihnen angegebenen Ablaufdatum abgelaufen sind. Diese Daten sollten automatisch mit dem automatischen Neulademechanismus in den Cache neu geladen werden. Und NCache bietet Ihnen dies mit Hilfe eines Read-Through-Handlers. Alles, was Sie tun müssen, ist, die gesamten Daten und den Cache mit load in den Cache erneut zu laden, separate Entitäten zu verwenden, aber neben diesen Merkmalen zu verwenden. Wie zum Beispiel Absolutes Ablaufdatum festlegen.

Das ist der Ablaufwert, den Sie für alle Produkte festlegen würden, die in den Cache geladen werden, und dann legen Sie den Resync-Anbieter fest, der im Wesentlichen Ihren Read-Through-Anbieter aufruft NCache. Durchlesen wird mit Verfall kombiniert. Anstatt also Daten aus dem Cache zu entfernen, lädt es tatsächlich neu, da es alle Schlüssel und alle datenbankbezogenen Informationen kennt, brauchen wir Sie nur, um den Kontext zu übergeben, und basierend auf diesem Kontext rufen wir Ihren Provider tatsächlich automatisch und resynchronisieren. Wir erhalten den aktualisierten Wert aus der Datenquelle.

Lassen Sie mich Ihnen ein funktionierendes Beispiel dafür zeigen. Hier ist eine Methode. Ich speichere dies als separate Entitäten. Normalerweise würde ich einen Ablauf von 5 Stunden festlegen, aber da wir nicht so viel Zeit haben, würde ich wirklich einen Ablauf von etwa 30 Sekunden festlegen und genau hier einen Haltepunkt setzen und alle laden Produkte in den Cache. Ich würde an dieser Stelle keinen Resync-Anbieter einrichten, nur um Ihnen zu zeigen, wie Ablaufzeiten funktionieren, und sobald die Ablaufzeit ins Spiel kommt, werden die Elemente aus dem Cache entfernt, und dann zeige ich Ihnen, wie Sie sich um dieses Szenario kümmern so, dass Sie, anstatt sie zu entfernen, einfach mit dem Read-Through-Handler neu laden.

Also verwende ich den lokalen Cache für dieses Beispielbit. Ich werde nur den Inhalt löschen, nur um auf der sicheren Seite zu sein, und dann werde ich dieses Stück Code ausführen und den Haltepunkt erreichen. Recht. Also, es hat 30 Sekunden Ablaufzeit und ich werde einfach zuschlagen und ich habe die eingestellten Produkte, richtig. Wir haben also alle Produkte hier und wir haben hier ungefähr tausend Einträge. Nach 30 Sekunden werden diese tausend Elemente basierend auf diesem absoluten Ablaufdatum abgelaufen sein, Flag, das wir eingerichtet haben, und ich werde diese Abfrage erneut ausführen und Sie würden sehen, dass sie nichts zurückgeben würde, weil nichts im Cache vorhanden ist. Es wird nur aus dem Cache verwendet. Also, wir haben abgelaufene Artikel. Ich werde dies noch einmal ausführen und Sie würden feststellen, dass ich den Wert 0 erhalten habe.

Dies ist also nicht das, was empfohlen oder bevorzugt wird, wenn man bedenkt, dass dies Ihre Referenzdaten sind, die gesamten Daten bereits in den Cache geladen sind und Sie die Erweiterungsmethode „From Cache Only“ aufrufen. Sie benötigen also unbedingt alle verfügbaren Daten, nicht die Teilantwort oder fehlende Daten und gleichzeitig sollten diese nach Ablauf nachgeladen werden. Anstatt es zu entfernen, sollte es neu geladen werden, und genau das werden wir mit Hilfe dieses Set Resync Provider-Namens tun.

Ich habe einen Beispiel-Resynchronisierungsanbieter, der sich hier befindet, IReadThruProvider. Was es wirklich tut, ist, dass wir Ihnen eine Standardimplementierung davon gegeben haben.

namespace Alachisoft.NCache.EFSampleResyncProvider
{
    public abstract class EFDefaultResyncProvider : IReadThruProvider
    {
        public virtual void Init(IDictionary parameters, string cacheId)
        {
            db = InitializedDbContext();
        }
        public virtual void LoadFromSource(string key, out 					
        ProviderCacheItem cacheItem)
        {
            cacheItem = new ProviderCacheItem(FetchItemFromDb(key));
            cacheItem.AbsoluteExpiration = DateTime.Now.AddHours(10);
            cacheItem.ResyncItemOnExpiration = true;
        }
        public virtual void Dispose()
        {
            db.Dispose();
        }
    }
}

Dies ist unser IReadThruProvider. Alles, was Sie tun müssen, ist, dies mit Hilfe des von uns konfigurierten Caches zu zeigen. Sie müssen den Read-Through-Handler einrichten. Lassen Sie mich zum Beispiel einfach einen neuen Cache erstellen, lassen Sie mich einfach einen lokalen Cache erstellen. Recht. Es ist also nur ein lokaler Cache. Ich werde einfach eine Backing-Quelle einrichten. Enable read through, Add and sagen wir EF default und das muss eingerichtet werden und ich kann das als Projekt verwenden und die Implementierung ist bereits erfolgt.

Es funktioniert so, dass ich den IReadThru-Handler implementiert habe. Dies ist der Standard-Resynchronisierungsanbieter, richtig. Es hat einige Methoden. Es hat eine Initialisierung, bei der Sie den DB-Kontext initialisieren. LoadFromSource, das bei Ablauf aufgerufen wird, und darin erhalte ich das Element aus der Datenbank. Wenn ich in die Definition gehe, kümmert sie sich tatsächlich um alle datenbankbezogenen Aufrufe, und das ist etwas, das wir als Teil unserer Implementierung bereitstellen. Unser NuGet-Paket deckt es als Teil davon ab. Wir erhalten also den Schlüssel und basierend auf diesem Schlüssel geben Sie den Kontext weiter, und der Kontext wird verwendet, um das eigentliche Objekt direkt aus der Datenbank zu erhalten.

Alles, was Sie tun müssen, ist, diesen EF-Standardresynchronisierungsanbieter zu kennen, zu erben, zu implementieren und Ihre eigene Implementierung anzugeben und uns den Datenbankkontext zu geben.

Das ist also eine abstrakte Klasse, die wir Ihnen gegeben haben. Sie müssen nur Ihren Northwind-Datenbankkontext oder einen beliebigen Datenbankkontext angeben, den Sie haben, und basierend darauf, sobald diese Methode überschrieben / implementiert wurde, registrieren Sie sie einfach in Ihrem Cache. Dies ist beispielsweise ein Resync-Anbieter. Wenn ich das öffne, enthält es zwei davon. Einer ist Standard und der andere ist Ihre Implementierung, und Sie können bei Bedarf Ihre Verbindungszeichenfolge und andere Informationen weitergeben, und das war's. Sie stellen diese einfach bereit. Lassen Sie mich nur auf dieses Stück eingehen und es würde Ihnen nur einen Erfolg geben. Das muss also gemacht werden. Wie ich bereits erwähnt habe, ist dies bereits als Teil von getan NCache, Implementierung. Das NuGet-Paket wird mit einem Resynchronisierungsanbieter geliefert, den Sie einfach implementieren können, indem Sie diese spezielle Methode hier implementieren und uns den Kontext angeben, und der Rest der Arbeit wird von diesem standardmäßigen Resynchronisierungsanbieter für das Beispiel ausgeführt, der tatsächlich auf die gleiche Weise wie die Erweiterung funktioniert Methoden funktionieren.

Wir konstruieren Ihren Schlüssel, damit wir wissen, welcher Schlüssel welche Entität darstellt, und basierend auf dieser Entität und diesen Schlüsselinformationen fragen wir die Datenbank tatsächlich mit den APIs von Entity Framework ab. Nun ist dies bereits für meinen Cache geschehen. Was ich hier getan habe, ist, dass ich es erfolgreich bereitgestellt habe. Also, für meinen Cache habe ich das bereits getan. Ich habe diesen EF-Standard und habe ihn bereitgestellt. Ich werde also denselben Anwendungsfall ausführen, aber dieses Mal würde ich ihn nicht einfach ablaufen lassen, sondern tatsächlich neu laden. Also, das werde ich tun. Alles, was ich tun muss, ist, den Namen des Resync-Anbieters einzurichten, und da ich plane, auch einige Werte zu aktualisieren, werde ich 60 Sekunden verwenden. In der Regel haben Sie für Referenzdaten viel mehr Zeit als absolutes Ablaufdatum angegeben, z. B. 5 Stunden oder mehr. Also lasse ich es einfach mit 60 Sekunden laufen und dieses Mal sehe ich, dass mein Resync-Anbieter eingerichtet ist.

Also führe ich diesen Anwendungsfall noch einmal aus und zeige Ihnen, wie er aktualisiert wird, anstatt zu verfallen, anstatt ihn zu entfernen. Das ist also gelaufen und kommt hoffentlich wieder an diesen Punkt. In Ordnung. Wir haben also Produkte geladen. Ich werde dies noch einmal ausführen und in dieser Zeit, da es eine Ablaufzeit von 60 Sekunden hat, werde ich dieses spezielle Produkt, die Produkt-ID, aktualisieren 17 und was wir tun werden, ist, dass wir einfach sagen, aktualisieren Sie es, in Ordnung.

Obwohl es in der Datenbank aktualisiert wird, wird es im Anwendungskontext noch nicht aktualisiert, da es nur Cache-Daten verwendet und noch nicht abgelaufen ist. Wir erhalten also weiterhin die älteren Werte, und wenn Sie in meinem Cache feststellen, dass wir tausend Elemente haben und es eine Readthru/Sek. gibt, würde dies nach 60 Sekunden eine Aktivität anzeigen, dann würde es automatisch den Read-Through-Handler aufrufen, den wir haben einfach aufstellen.

Lassen Sie es mich also noch einmal ausführen und ich erwarte erneut Bestellwerte, wenn sie nicht bereits neu geladen wurden, aber es würde einen Punkt geben, an dem sie einfach neu geladen würden, und danach würde sie einfach anstatt abzulaufen, nur die 999 von neu laden die Produkte. Es gibt ein zusätzliches Element, das ist normalerweise eine Referenz. Los geht's. Anstelle des Ablaufdatums ist also nur ein Element abgelaufen, da dies eine Liste von Schlüsseln ist. Andernfalls alle Referenzdaten, die auf meiner Abfrage basieren. Lassen Sie mich Ihnen die Abfrage zeigen, die besagt, dass die Produkt-ID kleiner als 1000 ist. Also das eigentlich repräsentiert 1000 Produkte.

Also werde ich diese Abfrage noch einmal ausführen und dieses Mal, da die Daten bereits nach Ablauf aktualisiert wurden, anstatt sie zu entfernen. Ich erwarte also, dass das aktualisierte Produkt im Cache hinzugefügt wird. Hier bitteschön. Daher wurde mein Produkt als Teil davon aktualisiert. Dies ist also, was wir als Teil unserer Option Nummer eins empfehlen, die besagt, dass Sie das Ablaufdatum verwenden, aber mit der Funktion zum automatischen Neuladen. Anstelle des Ablaufs laden Sie also einfach Daten neu und dies würde dafür sorgen, dass die Cache-Daten aktuell bleiben. Sie finden also eine bequeme Zeit, die es Ihnen ermöglicht, Daten im Cache zu behalten, Sie erhalten immer ältere Daten, und sobald diese älteren Daten ablaufen, könnte dies einen Tag dauern, sagen wir 24 Stunden , es können 2 Tage oder eine Woche sein, je nachdem, was in Ihrer Anwendung für Sie angenehm ist. Könnte auch einige Stunden dauern und danach würde es diese Daten einfach neu in den Cache laden.

Das ist also unsere Option Nummer eins. Ich hoffe, es war ziemlich einfach.

Option Nummer zwei ist, dass Sie kein Ablaufdatum verwenden. Das würde also nur dieses Problem hier lösen, wo Daten immer im Cache vorhanden wären. Aber Daten können im Cache veraltet sein und für immer veraltet sein. Dafür sollten Sie manuell neu laden und das ist auch sehr einfach.

void LoadAllProducts (NorthwindContext database)
{
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.SeperateEntities,
	};
		
	var res = (from products in database.Products select
    products).LoadIntoCache(options).ToList();

}

Alles, was Sie tun müssen, ist, dass Sie dieses Load All Products einfach nach einem periodischen Intervall aufrufen müssen. Zum Beispiel, wenn wir hier auf diesen Teil zurückkommen. Diese Methode muss also nach einigen Intervallen aufgerufen werden, und wie bereits erwähnt, geschieht dies normalerweise beim Start Ihrer Anwendung, und es könnte eine der Anwendungen sein, die sich darum kümmert, die sich um all dies kümmert. Also könnte es entweder das sein oder es könnte eine der Anwendungen sein, eine separate Anwendung, die das tut. Es könnte sich also um Ihre Anwendung, eine Ihrer Anwendungsinstanzen oder um eine separate Anwendung handeln, und diese Anwendung kann diese Methode regelmäßig nach beispielsweise 5 Stunden oder 24 Stunden aufrufen, was wiederum Ihre angenehme Zeit ist, nach der Sie möchten Dies soll gegen die Datenbank ausgeführt werden und Sie möchten, dass Ihre Produkte neu geladen werden.

LoadIntoCache würde sich also um dieses spezielle Szenario kümmern, in dem es gegen die Datenbank ausgeführt und neue Kopien in den Cache geladen würde. So übernehmen Sie Referenzdaten. Ich hoffe, ich war ziemlich direkt.

Halten Sie den Cache frisch: Transaktionsdaten

Kommen wir zum nächsten Segment, in dem wir Transaktionsdaten verwenden. Jetzt sind Transaktionsdaten etwas, das kurzlebig ist, richtig. Es ist ein Arbeitssatz, wie bereits erläutert. Sie können also 5 bis 10 Minuten Ablaufzeit verwenden. Also, was Sie hier wirklich tun müssen, da Sie FromCache verwenden, das gegen den Cache ausgeführt wird, wenn es im Cache vorhanden ist und wenn es nicht im Cache vorhanden ist, wird es immer automatisch gegen die Datenbank ausgeführt. Dies ist also in diese Erweiterungsmethode integriert, im Gegensatz zu FromCacheOnly, das Sie mit dem Referenzdatenszenario verwenden, rechts, das nur für den Cache ausgeführt wird. Es ist also in Ordnung, einige Daten verfügbar zu haben, unabhängig davon, ob Sie sie als Sammlung oder als separate Entität gespeichert haben.

Kurze Ablaufzeit, kein automatisches Neuladen
 private List<Orders> GetCustomerOrders (string CustomerID)
{
	CachingOptions options = new CachingOptions	
	{
		StoreAs = StoreAs = StoreAs.Collection
	};
	
	options.SetAbsoluteExpiration(DateTime.Now.AddSeconds(60));

    	List<Orders> orderList = (from customerOrder in database.Orders 					
        where customerOrder.Customer.CustomerId==CustomerID 
        select customerOrder).FromCache(out string cacheKey,
        options).ToList();

	return orderList;
 }

Sie verwenden also einfach einen kurzen Ablauf, sagen wir 60 Sekunden, obwohl ich dieses Beispiel für Referenzdaten verwendet habe, aber das war für diese spezielle Demo, aber für Referenzdaten haben Sie normalerweise einen Ablauf von 5 bis 10 Stunden und für Transaktionsdaten haben Sie Irgendwo zwischen 60 Sekunden oder verwandt, Ablauf ist damit verbunden, und da Sie From Cache verwenden, werfen wir einen Blick auf Get Customer Orders, da Sie FromCache verwenden, mit dem Sie die verwenden sollten, nehmen wir dies tatsächlich als Beispiel.

Richtig, also, Sie richten hier einen Ablauf ein und rufen diese FromCache-Erweiterungsmethode auf, die dafür sorgen sollte, dass sie aus der Datenbank abgerufen wird, wenn sie nicht im Cache vorhanden ist, und nach einiger Zeit, ob Ihr Arbeitssatz aktiv ist den Cache würden Sie es aus dem Cache bekommen, wenn es im Cache nicht aktiv ist, besteht die Möglichkeit, dass es nicht mehr benötigt wird, richtig. Am Ende kehren Sie also möglicherweise zur Datenbank zurück, und das ist das Richtige für Transaktionsdaten. Ich hoffe also, dass dies unsere Referenzdaten sowie Transaktionsdatenszenarien abdeckt und wie Cache-Daten in Bezug auf diese beiden aktuell gehalten werden können.

Umgang mit Beziehungen im Cache

Ich fahre mit unserem nächsten Segment fort, dem Umgang mit Beziehungen im Cache.

Ron, ich habe hier ein paar Fragen. Tut das NCache oder befinden sich die zwischengespeicherten Elemente in der NCache Server oder werden sie in jedem Anwendungsserver gespiegelt?

Sie wohnen in NCache. Richtig, die Gegenstände existieren also tatsächlich in NCache, Rechts. Das eigentliche Repository wird also darin verwaltet NCache und wir konstruieren tatsächlich die Schlüssel und Objekte neben diesen Entity-Methoden. Das ist also die Idee hier.

Eine andere Frage ist, können wir mehrere Cache Loader konfigurieren oder müssen alle zu einem konfiguriert werden, wenn wir Referenzdaten zum Cache hinzufügen?

Sie können, weil das Laden in den Cache eine generische Methode ist, richtig. Es lädt also tatsächlich was auch immer, die Abfrage, die Sie richtig ausführen möchten. Es ist also an die Abfrage gebunden. Sie können ein Vielfaches des Ladevorgangs in den Cache haben und es könnte eine separate Anwendung geben oder es könnten verschiedene Stellen innerhalb der Anwendung sein. Es ist also auch an diesem Ende sehr flexibel.

Umgang mit Beziehungen im Cache: One-Many

List<Region> GetRegionWithTerritories(NorthwindContext database)
{
	List<Region> regionDetails;
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.SeperateEntities
	};

	regionDetails = (from region in database.Region select region)
					.Include(region => region.Territories)
					.FromCache(options).ToList();

	return regionDetails;
}

Es gibt einige wichtige Konzepte, die ich hervorheben möchte. Wie geht man mit Beziehungen um? One-to-Many und Sie wissen schon, Many-to-Many-Beispiel.

Konzentrieren wir uns auf One-to-Many. Sagen wir, es gibt Regionen und dann gibt es Gebiete, die Teil von Regionen sind, und es besteht eine Eins-zu-Viele-Beziehung zwischen Regionen und Gebieten. Gehen wir zum Sync-Ansatz und holen wir uns eigentlich die Regionen von hier.

In Ordnung, also holen Sie sich Regionen mit Territorien. Die Grundidee hier ist, dass Sie das Schlüsselwort Include haben und dann FromCache verwenden und es immer als separate Entität speichern. Die Idee dabei ist, dass das übergeordnete Element der Region als separates Element im Cache gespeichert wird. Da die Region auch eine Eins-zu-Viele-Beziehung zu den Territorien hat und es innerhalb jeder Regionsentität eine Sammlung von Territorien gibt, NCache würde dem gehorchen. Sobald Sie FromCache aufrufen, wird einfach die Region abgerufen, und alle Regionen werden als separate Einheiten gespeichert, und basierend auf dem von Ihnen angegebenen Bereich werden alle Gebiete mit Hilfe von FromCache als separate Sammlung in jeder Region gespeichert .

Es ist also eine Entität mit einer Viele-Seite, der Sammlungsseite als verwandtem Objekt. So gehen Sie also mit One-to-Many-Anwendungsfällen um.

Zwischenspeichern von aggregierten Operationen

Dann haben Sie Caching Aggregate Operations. Wissen Sie, Sie können zu einer Entität oder zu einem Wert führen.

Caching-Aggregate-Operationen

Zum Beispiel einen Erst- oder Standardversender zu bekommen, richtig. Also, sagen wir mal, wenn ich hier nur einen First oder Default mache, würde mir das den ersten Shipper holen und dann wissen Sie, dass das gespeichert wird NCache.

Und in ähnlicher Weise könnte es eine Zählsumme sein. Es könnte jede Aggregatoperation sein, also könnte es ein Wert sein. Auch dies kann gespeichert werden NCache als separate Einheit.

Shippers GetFirstShipperInstance (NorthwindContext database)
{
	CachingOptions options = new CachingOptions
	{ 
		StoreAs = StoreAs.Collection
	};

	Shippers shipper = database.Shippers.DeferredFirstOrDefault()
						.FromCache(out string cacheKey, options);

	return shipper;

}

Und in ähnlicher Weise könnte es eine Zählsumme sein. Es könnte jede Aggregatoperation sein, also könnte es ein Wert sein. Auch dies kann gespeichert werden NCache als separate Einheit.

int GetTotalShippersCount (NorthwindContext database)
{
	CachingOptions options = new CachingOptions
	{
		StoreAs = StoreAs.Collection 
	};

	int count = database.Shippers.DeferredCount()
				.FromCache(out 	string cacheKey, options);
	
	return count;

}

Verteilte Caching-Architektur

Damit deckt dies unser Webinar in Bezug auf den technischen Teil ab. Gegen Ende werde ich Ihnen einige verteilte Caching-Architekturen zeigen.

Hochverfügbarkeit

NCache als Produkt ist sehr, skalierbar, schnell. Es ist etwas, das auf einer Peer-to-Peer-Architektur im Protokoll basiert. Es gibt keinen Single Point of Failure. Sie können Server spontan zu einem laufenden Cache hinzufügen oder daraus entfernen. Sie müssen den Cache oder die damit verbundenen Clients nicht stoppen. Sie können also dynamisch Änderungen an einem laufenden Cache-Cluster vornehmen.

hohe Verfügbarkeit

Caching-Topologien

Dann ist unsere beliebteste Topologie Partitionsreplikat-Cache. So können Sie Daten einfach in Form von Partitionen auf alle Server verteilen. Sie bündeln also die Speicherressourcen und Rechenressourcen, und das stellt Ihnen eine logische Kapazität dar, und jeder Dienst hat auch ein Backup. Server1 ist Backup auf 2. Server2 ist Backup auf 1 und Server3 ist Backup auf Server1. Im Round-Robin-Verfahren hat also jeder Server ein Backup auf einem anderen Server.

Caching-Topologien

Client-Cache (in der Nähe von Cache)

Ebenso ist dies eine sehr schnelle, sehr skalierbare, beliebteste Topologie. Sie können auch eine haben Client-Cache die auf Ihrer eigenen Anwendungsbox laufen kann. Es ist ein lokaler Cache, aber er ist mit dem Server-Cache synchronisiert. Eine Teilmenge der Daten würde automatisch und ohne Codeänderungen in den Cache gebracht. Dies verbessert Ihre Leistung, wenn Ihre Daten hauptsächlich Referenzcharakter haben. Sobald Sie also in den Cache laden und dann mit dem Aufrufen dieser Teilmenge der Daten beginnen, indem Sie den Client-Cache FromCacheOnly aufrufen, würde dies in diesem Fall wirklich helfen.

Client-Cache

WAN-Replikation des Cache

WAN-Replikation Ein weiteres Feature ist die Bridge-Replikation. Sie können Aktiv-Passiv- oder Aktiv-Aktiv-Datenstandorte haben. Alle Daten, die EF Core-Daten, ASP.NET-Sitzungen oder reguläre Daten können auf aktiv-passive oder aktiv-aktive Weise über das WAN an den Zielstandort übertragen werden. Also, das ist was NCache Abdeckungen als Teil davon.

WAN-Replikation

Zusammenfassung

Nur um es noch einmal zu wiederholen, ich brauche noch eine Minute, bevor ich es Nick übergebe. Wir sprachen also über eine einzelne Entität und das Speichern von Entitätssammlungen mit direkten APIs. Das war etwas anders in Bezug auf Erweiterungsmethoden, und dann sprachen wir über Erweiterungsmethoden, die ihrer Natur nach sehr einfacher und, wie Sie wissen, auch flexiblerer Natur waren. FromCache war die erste Methode, die etwas aus dem Cache holt, wenn es existiert, wenn nicht, holt es es automatisch aus der Datenquelle, im Gegensatz zu direkten APIs, wo Sie es selbst implementieren müssen. Es erstellt auch die Tasten und zugehörigen Optionen, die Sie hier einrichten.

Dann sprachen wir über Referenz- und Transaktionsdaten. Für die Handhabung von Referenzdaten müssen Sie die gesamten Daten mit LoadIntoCache laden, und Sie sollten FromCacheOnly aufrufen. LoadIntoCache wird immer gegen die Datenbank ausgeführt, und FromCacheOnly wird nur gegen den Cache ausgeführt, und dann haben wir über Transaktionsdaten gesprochen, die Sie mit Hilfe von FromCache verarbeiten können, und Sie haben einige Ablaufzeiten eingerichtet. Referenzdaten, um sie aktuell zu halten, müssen Sie Verfallsdaten verwenden und dann automatisch neu laden oder keine Verfallsdaten verwenden und dann manuell mit LoadIntoCache neu laden. Dann haben wir über Transaktionsdaten gesprochen, die Sie sich einfallen lassen müssen, eine Art Ablaufdatum und die Verwendung von FromCache, damit Sie sie erhalten, wenn sie im Cache vorhanden sind. Wenn es nicht im Cache vorhanden ist, holen Sie es immer aus der Datenbank.

Damit ist unsere Präsentation abgeschlossen. Bitte lassen Sie es mich wissen, wenn es irgendwelche Fragen gibt.

Sie erreichen uns jederzeit unter support@alachisoft.com. Bei technischen Fragen erreichen Sie uns auch unter sales@alachisoft.com. Wenn Sie es sich ansehen möchten, laden Sie das Produkt herunter und besuchen Sie unsere Website alachisoft.com und Sie können es herunterladen NCache und es wird mit einer 30-Tage-Testversion geliefert, die Sie verwenden können. Wenn Sie Fragen haben, lassen Sie es uns wissen. Andernfalls vielen Dank, dass Sie heute an dieser Show, dem Webinar, teilgenommen haben, und wir sehen uns beim nächsten Mal. Vielen Dank Ron. Danke Jungs.

Was macht man als nächstes?

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