Heutzutage integrieren die meisten Benutzeranwendungen, die auf umfangreiche Datenbankaufrufe angewiesen sind, verteiltes Caching für eine bessere Leistung und lineare Skalierbarkeit. Zu diesem Zweck möchte der Benutzer, dass immer dann, wenn Änderungen in der Datenbank auftreten, die Änderung sofort auch im Cache widergespiegelt wird. NCache Da es sich um einen verteilten In-Memory-Cache handelt, stehen uns verschiedene Techniken für ähnliche Zwecke zur Verfügung, um die Daten im Cache aktuell zu halten.
Erstens NCache bietet Ablauf Dabei werden Daten nach einem vordefinierten Intervall automatisch aus dem Cache entfernt. Zweitens kommt die Strategie von Cache-Abhängigkeit von der Datenbank Dabei bleiben die Daten im Cache mit der Datenbank synchronisiert und werden bei jeder Änderung ungültig. Ebenso kommt ein weiterer Mechanismus hinzu Cache-Refresher die in geplanten Intervallen im Hintergrund läuft und die Daten auf kontrollierte Weise aktuell und aktualisiert hält.
In diesem Blog geht es darum, die verschiedenen Strategien von Cache Refresher zu erklären und wie er die Daten im Cache frisch hält.
NCache Details Ablaufdokumente Cache Loader und Refresher
Cache Refresher: Überblick und Konzept
Nehmen wir an, der Benutzer betreibt einen Video-Streaming-Kanal und hat einige neue Informationen zusammen mit seinen jeweiligen Videos im Cache zwischengespeichert. Die Videos im Cache bleiben über einen längeren Zeitraum unverändert, aber jetzt werden aus irgendeinem Grund bestimmte neue Videos hinzugefügt und andere in der Datenbank aktualisiert. Dies führt dazu, dass die Benutzer die älteren Videos (veraltete Daten) ansehen, die bereits aktualisiert wurden.
NCache bietet Cache-Refresher Funktion, die die Daten im Cache aktuell hält, indem sie in einem bestimmten Aktualisierungsintervall aktualisiert wird. Das Aktualisieren von Cache-Daten umfasst das Hinzufügen, Aktualisieren und Entfernen von Daten, wenn sich Daten in der Datenquelle ändern.
Um Cache Refresher zu konfigurieren, muss der Benutzer zunächst implementieren Cache-Startuploader. Dieser Loader wird verwendet, um die Daten beim Cache-Start in Form von Datensätzen vorab in den Cache zu laden. Dies stellt eine Möglichkeit dar, verschiedene Datentypen zu gruppieren, um Parallelität zu erreichen. Bei jedem Cache-Start ruft Cache Loader automatisch Daten aus der Datenquelle für die konfigurierten Datensätze ab. Um diese vorinstallierten Daten aktuell und synchron mit den aktualisierten Daten in der Datenquelle zu halten, wird Cache Refresher verwendet, der diese Datensätze nach einem geplanten Zeitintervall separat aktualisiert.
Verschiedene Eigenschaften des Cache-Refreshers
Es gibt einige Eigenschaften für Cache Refresher, die Benutzer kennen müssen, bevor sie mit der Implementierung beginnen. Im Folgenden werden die Einzelheiten erläutert, die es zu beachten gilt.
- Datensätze: Ein Datensatz ist eine Möglichkeit für Benutzer, verschiedene Datentypen zu gruppieren, sodass sie sie in unterschiedlichen Intervallen oder Ereignissen separat laden oder aktualisieren können, um Parallelität zu erreichen.
- Datensatzplanung: Datensätze werden gemäß einem Datensatzzeitplan aktualisiert. Dieser Zeitplan kann sein: Tägliche Zeit, tägliches Intervall, wöchentlich und Monatlich. All dies entscheidet in seiner einzigartigen Implementierung über den genauen Zeitpunkt, nach dem ein Datensatz aktualisiert werden muss. Jeder Datensatz kann seinen eigenen Aktualisierungszeitplan haben. Ein Beispiel könnte das Aktualisieren des Videos zum Datensatz sein Bäckereiprodukte jeden Sonntag um XNUMX Uhr im Monat. Weitere Einzelheiten finden Sie unter Datensatzplanung in Dokumenten.
- Aktualisierungsintervall: Dabei handelt es sich um ein Intervall, nach dem ein Thread ausgeführt wird, um die Datensätze zu überprüfen, die zur Aktualisierung bereit sind, wenn die geplante Zeit erreicht ist. Für jeden Datensatz gilt ein anderes geplantes Aktualisierungsintervall, dieses Intervall bleibt jedoch auf Cache-Ebene gleich. Dieses Intervall kann auf mindestens 15 Minuten bzw. maximal 60 Minuten eingestellt werden.
Cache Loader- und Refresher-Dokumente Cache-Abhängigkeitsdokumente
Wie implementiert man den Cache-Refresher?
Für die Implementierung mit Cache Refresher muss der Benutzer zunächst den konfigurieren ICacheLoader Schnittstelle. Zweitens, NCache ruft die implementierte LoadDatasetOnStartup-Methode auf, um Daten in den Cache zu laden. Anschließend wird die RefreshDataset-Methode verwendet, um die vom Cache Loader in den Cache geladenen Daten zu aktualisieren.
Nehmen wir an, der Benutzer hat zwei Videos in der Datenbank, eines zur Neubewertung von Backwaren und das andere zu Bekleidungsprodukten. Die folgende Implementierung lädt Videos vorab in den Cache und aktualisiert dann bei jeder Aktualisierung die Daten in einem separaten Aktualisierungsintervall für beide.
Cache und Verbindung initialisieren
Die Init-Methode wird beim Cache-Start aufgerufen, um die Verbindung zu konfigurieren. Unten finden Sie eine Beispielimplementierung von Drin Methode der ICacheLoader-Schnittstelle. Hier öffnen wir eine SQL-Verbindung und initialisieren einen Cache mit dem vom Benutzer angegebenen Namen.
1 2 3 4 5 6 7 8 |
public void Init(IDictionary<string, string> parameters, string cacheName) { string connectionString = parameters["connectionString"] as string; connection = new SqlConnection(connectionString); connection.Open(); cache = CacheManager.GetCache(cacheName); } |
Datensätze in den Cache laden
Im zweiten Schritt verwendet der Benutzer LoadDatasetOnStartup, Eine Methode, die beim Cache-Start aufgerufen wird, um bestimmte Datensätze aus der Datenbank in den Cache zu laden, um den Cache vorab zu füllen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
public object LoadDatasetOnStartup(string dataset) { // Create a list of datasets to load at cache startup IList<object> datasetToLoad; switch (dataSet.ToLower()) { // If dataset is "products", fetch products from data source to load in cache case "products": datasetToLoad = FetchProductsFromDataSource(); // Insert fetched product in the cache foreach (var product in datasetToLoad) { string key = $"ProductID:{product.Id}"; cache.Insert(key, product); } break; default: // Invalid dataset } // User context is the time at which datasets were loaded in the cache object userContext = DateTime.Now; return userContext; } |
Geladene Datensätze aktualisieren
Drittens sollte der Benutzer die Implementierung von bereitstellen, um Datensätze in regelmäßigen Abständen zu aktualisieren Datensatz aktualisieren. Hier sollte der Benutzer entweder die bereits vom Cache Loader geladenen vorinstallierten Daten aktualisieren, neue Daten hinzufügen oder die Daten aus diesem bestimmten Datensatz entfernen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public object RefreshDataset(string dataset, object userContext) { *DateTime? lastRefreshTime; switch (dataset.ToLower()) { // If dataset is "bakery products", fetch updated products from data source case "bakery products": lastRefreshTime = userContext as DateTime?; IList<Product> productsToRefresh = FetchUpdatedProducts(lastRefreshTime) as IList<Product>; // Insert updated products in the cache foreach (var product in productsToRefresh) { string key = $"ProductID:{product.Id}"; CacheItem cacheItem = new CacheItem(product); _cache.Insert(key, cacheItem); } break; default: // Invalid dataset } // User context is the time at which datasets were refreshed userContext = DateTime.Now; return userContext; } |
Implementieren Sie eine umfragebasierte Aktualisierung
Jetzt kommt die Methode GetDatasetsToRefresh, Dies wird bei jedem Aktualisierungsintervall aufgerufen und sollte nur bereitgestellt werden, wenn der Benutzer seine eigene benutzerdefinierte Logik verwenden möchte, um die Aktualisierungszeit für verschiedene geladene Datensätze zu steuern. Die zurückgegebenen Datensätze werden entweder sofort oder am selben Tag wie angegeben aktualisiert.
Aktualisieren Sie den Datensatz bei Bedarf
Schließlich hat der Benutzer auch die Möglichkeit, seine vorkonfigurierten Datensätze zur Laufzeit über das zu aktualisieren Invoke-RefreshDataset Cmdlet. Hier können Datensätze sofort oder innerhalb der nächsten 24 Stunden aktualisiert werden RefreshPreference
Möglichkeit. Unten sehen Sie ein Beispiel, bei dem das Datensatzprodukt sofort aktualisiert wird demoClusteredCache
auf Server 20.200.20.11.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
Konfigurieren Sie Cache Loader und Refresher über NCache Web Manager
Sobald der Benutzer Cache Startup Loader und Refresher implementiert hat, kann er beides über Web Manager konfigurieren und das Aktualisierungsintervall entsprechend seinen Anforderungen festlegen. Nachfolgend erfahren Sie, wie es gemacht werden kann.
Konfigurieren Sie Cache Loader und Refresher Konfigurieren des Datenablaufs
Abschluss des Blogs!
Am Ende zeigt alles, was bisher besprochen wurde, dass der Cache effizient aktualisiert werden muss und Cache Refresher der beste Weg dafür ist. Es aktualisiert die Cache-Daten auf sehr systematische Weise, wenn Änderungen in der Datenbank auftreten. Genau wie Cache Refresher, NCache bietet viele interessante Funktionen, die ohne Unannehmlichkeiten ausgeführt werden können. Weitere Informationen finden Sie auf unserer Website!
NCache Details Herunterladen NCache Editionsvergleich