Implementieren Sie Cache Loader und Refresher
Um Cache Startup Loader und Refresher zu verwenden, muss die ICacheLoader
Die Schnittstelle muss zuerst implementiert werden. Anschließend kann die benutzerdefinierte Logik von Loader und Refresher mit konfiguriert werden NCache Management Center or Befehlszeilentools. NCache lädt und aktualisiert Daten aus der konfigurierten Datenquelle basierend auf der benutzerdefinierten Logik. Beim Cache-Start, NCache ruft die Init
Methode des Cache Startup Loader, um ihn zu initialisieren. Erfolgreiche Initialisierung des Cache-Startup-Loaders, Aufrufe der Implementierung LoadDatasetOnStartup
Methode zum Laden von Daten in den Cache. Es verwendet dann die Datensatz aktualisieren Methode zum Aktualisieren der in den Cache geladenen Daten auf der ermittelten Aktualisierungsintervall.
Im folgenden Beispiel implementiert der Client die ICacheLoader
Schnittstelle zum Konfigurieren der benutzerdefinierten Loader- und Refresher-Logik. Wenn Sie zwei Datensätze aus dem konfiguriert haben NCache Management Center: Produkte und Lieferanten. Die folgende Implementierung wird geladen Produkte und Lieferanten beim Cache-Start. Darüber hinaus werden diese Datensätze im angegebenen Aktualisierungszeitintervall aktualisiert.
Weitere Einzelheiten zu den Komponenten von Cache Loader finden Sie im Kapitel Komponenten von Cache Startup Loader und Refresher.
Voraussetzungen für Cache Loader und Refresher
- Lernen Sie die Standardvoraussetzungen kennen, die für die Arbeit mit allen erforderlich sind NCache serverseitige Features entnehmen Sie bitte der angegebenen Seite Serverseitige API-Voraussetzungen.
- Einzelheiten zur API finden Sie unter: ICache, CacheItem, ICacheLoader.
- Dies sollte ein Klassenbibliotheksprojekt sein.
- Stelle sicher, dass Konfigurieren Sie den Cache Loader Verwendung der NCache Management Center oder Befehlszeilentools auf der NCache Cluster.
Cache Loader und Refresher initialisieren
Der folgende Code zeigt, wie die implementiert wird Init
Methode der ICacheLoader
Schnittstelle. Diese Methode nimmt Parameter als Eingabe und weist ihnen Werte zu.
public void Init(IDictionary<string, string> parameters, string cacheName)
{
cache = CacheManager.GetCache(cacheName);
connectionString = parameters.ContainsKey("ConnectionString") ? parameters["ConnectionString"] : null;
if (connectionString != null)
{
connection = new SqlConnection(connectionString);
}
}
Note
Um sicherzustellen, dass der Vorgang ausfallsicher ist, wird empfohlen, alle potenziellen Ausnahmen in Ihrer Anwendung zu behandeln, wie in erläutert Umgang mit Fehlern.
Daten beim Cache-Start laden
Die folgende Implementierung des LoadDatasetOnStartup
Methode holt a Produkt aus der Datenquelle und fügt sie dem Cache hinzu. Der LoadDatasetOnStartup
gibt einen Benutzerkontext zurück, der die Informationen zu den in den Cache geladenen Daten enthält. Diese Methode wird aufgerufen, wenn der Cache beginnt, Daten in den Cache vorab zu laden.
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 products in the cache
foreach (var product in datasetToLoad)
{
string key = $"ProductID:{product.Id}";
cache.Insert(key, product);
}
break;
// If dataset is suppliers, fetch suppliers from data source to load in cache
case "suppliers":
datasetToLoad = FetchSuppliersFromDataSource();
// Insert fetched suppliers in the cache
foreach (var supplier in datasetToLoad)
{
string key = $"SupplierID:{supplier.Id}";
cache.Insert(key, supplier);
}
break;
default:
// Invalid dataset
}
// User context is the time at which datasets were loaded in the cache
object userContext = DateTime.Now;
return userContext;
}
Datensatz aktualisieren
Der folgende Code implementiert, wie die Daten aktualisiert werden, die beim Start in den Cache geladen wurden, wenn Cache Refresher aufgerufen wird. Das Datensatz aktualisieren Die Methode verwendet den von der zurückgegebenen Benutzerkontext LoadDatasetOnStartup -Methode, um zu überprüfen, welche Daten aktualisiert werden sollen.
public object RefreshDataset(string dataset, object userContext)
{
DateTime? lastRefreshTime;
switch (dataset.ToLower())
{
// If dataset is products, fetch updated products from data source
case "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;
// If dataset is supplier, fetch updated suppliers from data source
case "suppliers":
lastRefreshTime = userContext as DateTime?;
IList<Supplier> suppliersToRefresh = FetchUpdatedSuppliers(lastRefreshTime) as IList<Supplier>;
// Insert updated suppliers in the cache
foreach (var supplier in suppliersToRefresh)
{
string key = $"SupplierID:{supplier.Id}";
CacheItem cacheItem = new CacheItem(supplier);
_cache.Insert(key, cacheItem);
}
break;
default:
// Invalid dataset
}
// User context is the time at which datasets were refreshed
userContext = DateTime.Now;
return userContext;
}
Abrufen von zu aktualisierenden Datensätzen
Das GetDatasetsToRefresh Die Methode implementiert die benutzerdefinierte Logik, um einen vorkonfigurierten Datensatz zur Laufzeit basierend auf dem zu aktualisieren RefreshPreference
. Diese Methode nimmt den Benutzerkontext und weist einen zu RefreshPreference abhängig vom angegebenen Datensatz.
public IDictionary<string, RefreshPreference> GetDatasetsToRefresh(IDictionary<string, object> userContexts)
{
DateTime? lastRefreshTime;
bool datasetHasUpdated;
// Create a dictionary for datasets to refresh with their Refresh Preference
IDictionary<string, RefreshPreference> DatasetsToRefresh = new Dictionary<string, RefreshPreference>();
foreach (var dataset in userContexts.Keys)
{
switch (dataset.ToLower())
{
// If dataset is products, check if dataset has been updated in data source
// if yes, then refresh the dataset now
case "products":
lastRefreshTime = userContexts[dataset] as DateTime?;
datasetHasUpdated = HasProductDatasetUpdated(dataset, lastRefreshTime);
if (datasetHasUpdated)
{
DatasetsToRefresh.Add(dataset, RefreshPreference.RefreshNow);
}
break;
// If dataset is suppliers, check if dataset has been updated in data source
// if yes, then refresh dataset on next time of day
case "suppliers":
lastRefreshTime = userContexts[dataset] as DateTime?;
datasetHasUpdated = HasSupplierDatasetUpdated(dataset, lastRefreshTime);
if (datasetHasUpdated)
{
DatasetsToRefresh.Add(dataset, RefreshPreference.RefreshOnNextTimeOfDay);
}
break;
default:
// Invalid dataset
}
}
// Return the dictionary containing datasets to refresh on polling with their refresh preferences
return DatasetsToRefresh;
}
Alle Ressourcen entsorgen
Am Ende ruft die Dispose
Die Methode stellt sicher, dass Sie alle Ressourcen geschlossen/gelöscht haben, um Verschwendung zu vermeiden.
Note
Konfigurieren Sie Cache Loader/Refresher ein NCache unter Bezugnahme auf Konfigurieren Sie Cache Loader und Refresher im Administratorhandbuch um Hilfe.
Weitere Informationen
NCache stellt eine Beispielanwendung für Cache Loader und Refresher bereit GitHub.
Siehe auch
.NETZ: Alachisoft.NCache.Laufzeit Namespace.
Java: com.alachisoft.ncache.runtime.cacheloader Namespace.