Implémenter le chargeur de cache et le rafraîchissement
Pour utiliser Cache Startup Loader and Refresher, le ICacheLoader
l'interface doit être implémentée en premier. Ensuite, la logique personnalisée de Loader et Refresher peut être configurée à l'aide de NCache Centre de gestion or Outils de ligne de commande. NCache charge et actualise les données de la source de données configurée en fonction de la logique personnalisée. Au démarrage du cache, NCache appelle le Init
méthode du Cache Startup Loader pour l’initialiser. Initialisation réussie du Cache Startup Loader, appelle le système implémenté LoadDatasetOnStartup
méthode pour charger les données dans le cache. Il utilise alors le Actualiser l'ensemble de données méthode pour rafraîchir les données chargées dans le cache sur le Intervalle de rafraîchissement.
Dans l'exemple suivant, le client implémente le ICacheLoader
interface pour configurer sa logique personnalisée de chargeur et de rafraîchissement. Si vous avez configuré deux ensembles de données à partir du NCache Centre de gestion: Produits ainsi que le Fournisseurs. Les charges d'implémentation suivantes Produits ainsi que le Fournisseurs au démarrage du cache. De plus, il actualise ces ensembles de données selon l'intervalle de temps d'actualisation spécifié.
Pour plus de détails sur les composants de Cache Loader, reportez-vous au chapitre Composants de Cache Startup Loader et Refresher.
Conditions préalables au chargeur de cache et à l'actualisation
- Pour en savoir plus sur les prérequis standard requis pour travailler avec tous NCache fonctionnalités côté serveur, veuillez vous référer à la page donnée sur Prérequis de l'API côté serveur.
- Pour plus de détails sur l'API, reportez-vous à : ICache, CacheItem, ICacheLoader.
- Cela devrait être un projet de bibliothèque de classes.
- Assurez-vous de configurer le chargeur de cache utilisant l' NCache Centre de gestion ou outils de ligne de commande sur le NCache .
Initialiser le chargeur et l'actualisation du cache
Le code suivant montre comment implémenter le Init
méthode de ICacheLoader
interface. Cette méthode prend des paramètres en entrée et leur attribue des valeurs.
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);
}
}
Notes
Pour garantir la sécurité de l'opération, il est recommandé de gérer toutes les exceptions potentielles au sein de votre application, comme expliqué dans Gestion des échecs.
Charger les données au démarrage du cache
La mise en œuvre suivante du LoadDatasetOnStartup
méthode récupère un Produit à partir de la source de données et l'ajoute au cache. Le LoadDatasetOnStartup
renvoie un contexte utilisateur qui contient les informations sur les données chargées dans le cache. Cette méthode est appelée lorsque le cache commence à précharger les données dans le 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;
}
Actualiser l'ensemble de données
Le code suivant implémente comment actualiser les données qui ont été chargées dans le cache au démarrage chaque fois que Cache Refresher est appelé. Le Actualiser l'ensemble de données La méthode utilise le contexte utilisateur renvoyé par le LoadDatasetOnStartup méthode pour vérifier quelles données actualiser.
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;
}
Obtenir des jeux de données à actualiser
La GetDatasetsToRefresh La méthode implémente la logique personnalisée pour actualiser un ensemble de données préconfiguré au moment de l'exécution en fonction du RefreshPreference
. Cette méthode prend le contexte utilisateur et attribue un Préférence d'actualisation en fonction du jeu de données spécifié.
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;
}
Disposer de toutes les ressources
Au final, appeler le Dispose
La méthode garantit que vous avez fermé/supprimé toutes les ressources pour éviter le gaspillage.
Notes
Configurer Cache Loader/Refresher sur NCache en se référant à Configurer Cache Loader et Refresher dans le Guide de l'administrateur pour obtenir de l'aide.
Ressources additionnelles
NCache fournit un exemple d'application pour Cache Loader et Refresher sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.Durée espace de noms.
Java: com.alachisoft.ncache.runtime.cacheloader espace de noms.