Implementa il caricatore di cache e l'aggiornamento
Per utilizzare Cache Startup Loader e Refresher, il ICacheLoader
l'interfaccia deve essere implementata prima. Quindi è possibile configurare la logica personalizzata di Loader e Refresher utilizzando NCache Centro di gestione or Strumenti della riga di comando. NCache carica e aggiorna i dati dall'origine dati configurata in base alla logica personalizzata. All'avvio della cache, NCache chiama il Init
metodo del Cache Startup Loader per inizializzarlo. L'inizializzazione riuscita del Cache Startup Loader richiama il file implement LoadDatasetOnStartup
metodo per caricare i dati nella cache. Quindi utilizza il Aggiorna set di dati metodo per aggiornare i dati caricati nella cache sul determinato Intervallo di aggiornamento
Nell'esempio seguente, il client implementa il ICacheLoader
per configurare la logica personalizzata del caricatore e dell'aggiornamento. Se hai configurato due set di dati da NCache Centro di gestione: Prodotti ed Fornitori. Viene caricata l'implementazione seguente Prodotti ed Fornitori all'avvio della cache. Inoltre, aggiorna questi set di dati in base all'intervallo di tempo di aggiornamento specificato.
Per maggiori dettagli sui componenti di Cache Loader, fare riferimento al capitolo Componenti di Cache Startup Loader e Refresher.
Prerequisiti del caricatore e dell'aggiornamento della cache
- Per conoscere i prerequisiti standard richiesti per lavorare con all NCache caratteristiche lato server si prega di fare riferimento alla pagina indicata su Prerequisiti API lato server.
- Per i dettagli dell'API, fare riferimento a: ICache, CacheItem, ICacheLoader.
- Questo dovrebbe essere un progetto di libreria di classi.
- Assicurati che configurare il caricatore della cache usando il NCache Centro Gestione o Strumenti da riga di comando nel file NCache grappolo.
Inizializza il caricatore e l'aggiornamento della cache
Il codice seguente mostra come implementare il Init
metodo del ICacheLoader
interfaccia. Questo metodo prende i parametri come input e assegna loro dei valori.
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:
Per garantire che l'operazione sia a prova di errore, si consiglia di gestire eventuali potenziali eccezioni all'interno dell'applicazione, come spiegato in Gestione dei guasti.
Carica dati all'avvio della cache
La seguente implementazione del LoadDatasetOnStartup
metodo recupera a Prodotto dall'origine dati e lo aggiunge alla cache. IL LoadDatasetOnStartup
restituisce un contesto utente che contiene le informazioni sui dati caricati nella cache. Questo metodo viene chiamato quando la cache inizia a precaricare i dati nella cache.
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;
}
Aggiorna set di dati
Il codice seguente implementa come aggiornare i dati che sono stati caricati nella cache all'avvio ogni volta che viene richiamato Cache Refresher. Il Aggiorna set di dati utilizza il contesto utente restituito da Carica set di dati all'avvio metodo per verificare quali dati aggiornare.
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;
}
Ottieni set di dati da aggiornare
I Ottieni set di dati da aggiornare Il metodo implementa la logica personalizzata per aggiornare un set di dati preconfigurato in fase di esecuzione in base a RefreshPreference
. Questo metodo prende il contesto dell'utente e assegna a AggiornaPreferenza a seconda del set di dati specificato.
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;
}
Smaltire tutte le risorse
Alla fine, chiamando il Dispose
Il metodo garantisce di aver chiuso/eliminato tutte le risorse per evitare sprechi.
Note:
Configura il caricatore/aggiornamento della cache attivato NCache facendo riferimento a Configura il caricatore di cache e l'aggiornamento nella Guida dell'amministratore per assistenza.
Risorse addizionali
NCache fornisce un'applicazione di esempio per Cache Loader e Refresher GitHub.
Vedere anche
.NETTO: Alachisoft.NCache.Durata spazio dei nomi.
Giava: com.alachisoft.ncache.runtime.cacheloader spazio dei nomi.