De nos jours, la plupart des applications utilisateur qui reposent sur des appels de base de données lourds intègrent une mise en cache distribuée pour de meilleures performances et une évolutivité linéaire. À cette fin, l'utilisateur souhaiterait que chaque fois que des modifications se produisent dans la base de données, la modification soit immédiatement reflétée dans le cache également. NCache étant un cache distribué en mémoire, nous fournit différentes techniques à des fins similaires pour conserver les données à jour dans le cache.
Tout d'abord, NCache fournit Expiration où les données sont automatiquement supprimées du cache après un intervalle prédéfini. Vient ensuite la stratégie de Dépendance du cache sur la base de données où les données en cache restent synchronisées avec la base de données et sont invalidées chaque fois qu'elles sont modifiées. De même, vient un autre mécanisme qui est Rafraîchissement du cache qui s'exécute en arrière-plan à des intervalles planifiés et conserve les données fraîches et mises à jour de manière contrôlée.
Ce blog a pour but d'expliquer les différentes stratégies de Cache Refresher et comment il maintient les données à jour dans le cache.
NCache Détails Documents d'expiration Chargeur de cache et rafraîchissement
Rafraîchissement du cache : présentation et concept
Supposons que l'utilisateur exécute un canal de streaming vidéo et mette en cache de nouvelles informations avec leurs vidéos respectives dans le cache. Pendant une période plus longue, les vidéos dans le cache restent inchangées, mais maintenant, pour une raison quelconque, certaines nouvelles vidéos sont ajoutées et d'autres sont mises à jour dans la base de données. Cela amène les utilisateurs à visualiser les anciennes vidéos (données obsolètes) qui ont déjà été mises à jour.
NCache fournit Rafraîchissement du cache fonctionnalité qui maintient les données dans le cache à jour en les actualisant à un intervalle de rafraîchissement spécifique. L'actualisation des données du cache comprend leur ajout, leur mise à jour et leur suppression chaque fois que les données changent dans la source de données.
Pour configurer Cache Refresher, l'utilisateur doit d'abord implémenter Chargeur de démarrage du cache. Ce chargeur est utilisé pour précharger les données dans le cache au démarrage du cache sous la forme d'ensembles de données qui représentent un moyen de regrouper différents types de données pour atteindre le parallélisme. Chaque fois que le cache démarre, Cache Loader récupère automatiquement les données de la source de données par rapport aux ensembles de données configurés. Pour garder ces données préchargées à jour et synchronisées avec les données mises à jour dans la source de données, Cache Refresher est utilisé pour actualiser ces ensembles de données séparément après un intervalle de temps planifié.
Différentes propriétés du rafraîchisseur de cache
L'utilisateur doit connaître certaines propriétés de Cache Refresher avant de commencer l'implémentation. Vous trouverez ci-dessous leurs détails à garder à l'esprit.
- Jeux de données: Un jeu de données est un moyen pour l'utilisateur de regrouper différents types de données afin qu'il puisse les charger ou les actualiser séparément à différents intervalles ou événements pour atteindre le parallélisme.
- Planification de l'ensemble de données : Les ensembles de données sont actualisés selon un calendrier d'ensembles de données. Cet horaire peut être : Heure quotidienne, Intervalle quotidien, Hebdomadaire ainsi que Mensuelle. Tous ces éléments, qui, dans leur implémentation unique, décident de l'heure exacte après laquelle un ensemble de données doit être actualisé. Chaque ensemble de données peut avoir son propre calendrier d'actualisation. Un exemple peut être que, rafraîchir la vidéo concernant l'ensemble de données produits de boulangerie tous les dimanches midi de chaque mois. Pour plus de détails, reportez-vous à Planification d'ensembles de données dans Docs.
- Intervalle de rafraîchissement: Il s'agit d'un intervalle après lequel un thread s'exécute pour vérifier les ensembles de données qui sont prêts à être actualisés lorsque leur heure planifiée est arrivée. Chaque jeu de données a un intervalle d'actualisation programmé différent, mais cet intervalle reste le même au niveau du cache. Cet intervalle peut être réglé respectivement sur un minimum de 15 minutes et un maximum de 60 minutes.
Cache Loader et Refresher Docs Documents sur la dépendance du cache
Comment implémenter Cache Refresher ?
Pour la mise en œuvre avec Cache Refresher, l'utilisateur doit d'abord configurer le ICacheLoader interface. Deuxièmement, NCache appelle la méthode implémentée LoadDatasetOnStartup pour charger les données dans le cache. Il utilise ensuite la méthode RefreshDataset pour actualiser les données chargées dans le cache par le Cache Loader.
Supposons que l'utilisateur ait deux vidéos dans la base de données, l'une reclassant des produits de boulangerie et l'autre des produits vestimentaires. L'implémentation suivante précharge les vidéos dans le cache, puis pour toute mise à jour, actualise les données sur un intervalle d'actualisation distinct pour les deux.
Initialiser le cache et la connexion
La méthode init est appelée au démarrage du cache pour configurer la connexion. Vous trouverez ci-dessous un exemple d'implémentation de Init méthode de l'interface ICacheLoader. Ici, nous ouvrons une connexion SQL et initialisons un cache avec le nom donné par l'utilisateur.
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); } |
Charger les ensembles de données dans le cache
Dans la deuxième étape, l'utilisateur utilise LoadDatasetOnStartup, une méthode appelée au démarrage du cache pour charger des ensembles de données spécifiés dans le cache à partir de la base de données afin de pré-remplir le cache.
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; } |
Actualiser les ensembles de données chargés
Troisièmement, pour actualiser les ensembles de données à intervalles réguliers, l'utilisateur doit fournir la mise en œuvre de Actualiser l'ensemble de données. Ici, l'utilisateur doit soit mettre à jour les données déjà préchargées chargées par Cache Loader, ajouter de nouvelles données ou supprimer les données de cet ensemble de données particulier.
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; } |
Mettre en œuvre un rappel basé sur un sondage
Maintenant, vient la méthode GetDatasetsToRefresh, qui est appelé à chaque intervalle d'actualisation et ne doit être fourni que si l'utilisateur souhaite utiliser sa propre logique personnalisée pour contrôler le temps d'actualisation des différents ensembles de données chargés. Ces ensembles de données renvoyés sont soit actualisés immédiatement, soit dans la même journée, comme indiqué.
Actualiser l'ensemble de données à la demande
Enfin, l'utilisateur a également la possibilité d'actualiser ses ensembles de données préconfigurés lors de l'exécution via le Invoquer-ActualiserDataset applet de commande. Ici, les ensembles de données peuvent être actualisés immédiatement ou dans les prochaines 24 heures à l'aide de la RefreshPreference
option. Un exemple est illustré ci-dessous où le produit de l'ensemble de données est immédiatement actualisé sur demoClusteredCache
sur le serveur 20.200.20.11.
1 |
Invoke-RefresherDataset -CacheName demoClusteredCache -Server 20.200.20.11 -Dataset product -RefreshPreference RefreshNow |
Configurez Cache Loader et Refresher via NCache Web Manager
Une fois que l'utilisateur a implémenté Cache Startup Loader et Refresher, il peut configurer les deux via Web Manager et définir l'intervalle d'actualisation en fonction de ses besoins. Voici comment cela peut être fait.
Configurer Cache Loader et Refresher Configuration de l'expiration des données
Conclusion du blog !
Vers la fin, tout ce qui a été discuté jusqu'à présent indique que le cache doit être mis à jour efficacement et Cache Refresher est la meilleure façon de le faire. Il met à jour les données du cache si un changement se produit dans la base de données de manière très systématique. Tout comme Cache Refresher, NCache fournit de nombreuses fonctionnalités intéressantes qui peuvent être exécutées sans aucun inconvénient. Consultez notre site Web pour plus de détails!
NCache Détails Télécharger NCache Comparaison Des Éditions