ASP.NET Core Mise en cache des réponses avec IDistributedCache
ASP.NET Core fournit Mise en cache des réponses qui vous permet de mettre en cache la réponse du serveur d'une requête client pour de futures requêtes.
La mise en cache des réponses améliore les performances des applications lorsque la réponse est servie à partir du cache. De plus, cela soulage la charge de traitement des serveurs car ils n'ont pas besoin de traiter et de générer à nouveau une réponse pour la même demande.
Notes
Pour les options avancées concernant la mise en cache des réponses utilisant la dépendance, accédez à ASP.NET Core Mise en cache des réponses.
Quand utiliser la mise en cache des réponses avec IDistributedCache ?
La mise en cache des réponses peut être utilisée pour mettre en cache des éléments d’application statiques et ayant une très faible fréquence de modification. Cela inclut les fichiers CSS/JavaScript, les médias ou les métadonnées d'une page Web. Par conséquent, au lieu de redemander le contenu au serveur, ces données peuvent être récupérées du cache.
Options de mise en cache des réponses
Mise en cache basée sur HTTPS
Met en cache les données du côté du navigateur Web sur le client. Cela réduit le nombre de requêtes qu'un client adresse au serveur Web, car toutes les requêtes ultérieures seront traitées par le cache plutôt que par le serveur Web. Cependant, une fois la réponse mise en cache dans le navigateur, elle n'expirera qu'une fois le temps de mise en cache attribué écoulé et ne pourra pas être effacée en cas de besoin.
Mise en cache en mémoire
Met en cache les données dans la mémoire du serveur, à l'aide d'ASP.NET Corele propre fournisseur de mise en cache interne de. Cette option est plus flexible pour la mise en cache des réponses comme ASP.NET Core fournit Assistant de balise de cache qui permet d'ajouter des balises pour spécifier quelle vue de l'application MVC doit être mise en cache. Puisqu'il s'agit d'InProc, vous pouvez redémarrer le moteur ASP.NET pour vider le cache si nécessaire.
Mise en cache distribuée
Met en cache les données en mémoire, si l'application est hébergée dans une batterie de serveurs Web. Le cache est réparti sur tous les serveurs de la ferme Web et n'importe quel serveur peut répondre au client si les données demandées sont disponibles dans le cache. Semblable à la mise en cache en mémoire, Assistant de balise de cache distribué permet de spécifier les vues exactes qui doivent être mises en cache. C'est ici que NCache entre en jeu, car il peut être utilisé comme cache distribué pour Response Caching via son interface IDistributedCache. De plus, cela étend davantage de contrôle à votre application car le cache est évolutif et les éléments peuvent être supprimés du cache si nécessaire.
En utilisant NCache pour la mise en cache des réponses
Utiliser NCache en tant que cache distribué pour la mise en cache des réponses, NCache fournit ses propres méthodes d'extension pour configurer les services et le middleware.
Pré-requis
- Installez les packages NuGet suivants dans votre application :
- Enterprise: NCache.Microsoft.Extensions.Caching
- Professionnel: NCache.Microsoft.Extensions.Caching.Professional
- Open source: NCache.Microsoft.Extensions.Caching.OpenSource
- Utiliser NCacheLes méthodes de Response Caching incluent l'espace de noms suivant dans votre application :
- Le cache doit être en cours d'exécution.
- Pour plus de détails sur l'API, reportez-vous à : AddResponseCaching.
- Assurez-vous que les données ajoutées sont sérialisable.
- 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.
- Pour gérer les exceptions invisibles, reportez-vous au Dépannage .
Configurer le service de mise en cache des réponses
ASP.NET Core fournit son propre middleware pour la mise en cache des réponses. Cela doit être ajouté à la collection de services en utilisant le AddResponseCaching méthode.
Ouvert Démarrage.cs de votre projet.
Dans le
ConfigureServices
méthode, ajoutez le service suivant :
public void ConfigureServices(IServiceCollection services)
{
services.AddResponseCaching();
// Remaining services here
}
Configurer NCache en tant que cache distribué
NCache fournit des méthodes personnalisées via IDistributedCache pour se configurer en tant que cache distribué pour les applications ASP.NET. Cela nécessite juste un nom de cache dans NCache et toutes les configurations facultatives pour stocker le contenu MVC.
Méthode 1 : spécifier la configuration du cache dans AppSettings.json
Les configurations de cache peuvent être ajoutées dans une section distincte dans Appsettings.json de votre candidature. L'exemple suivant ajoute une section NCacheSettings
qui configure le nom du cache. Vous pouvez modifier le nom en fonction de votre cache enregistré.
Important
Assurez-vous que le cache spécifié est en cours d'exécution.
. . .
"NCacheSettings": {
"CacheName": "demoCache",
"EnableLogs": "True",
"ExceptionsEnabled": "True"
}
. . .
Une fois la configuration du cache spécifiée, NCache des services sont à ajouter pour configurer NCache en tant que cache distribué dans l'application.
Ouvert Démarrage.cs de votre projet.
Dans le
ConfigureServices
méthode, ajoutez les services suivants :AddNCacheDistributedCache
la méthode d'extension initialise les configurations à partir de Appsettings.json avant d'ajouter les services au conteneur et ajoute NCache comme cache distribué par défaut en tant qu'implémentation deIDistributedCache
.
public void ConfigureServices(IServiceCollection services)
{
// Add NCache services to the container
services.AddNCacheDistributedCache(Configuration.GetSection("NCacheSettings"));
}
Méthode 2 : spécifier la configuration dans IOptions
Une autre méthode pour spécifier des configurations consiste à fournir des paramètres de configuration tels que IOptions
.
public void ConfigureServices(IServiceCollection services)
{
// Add framework services
services.AddMvc();
services.AddNCacheDistributedCache(configuration =>
{
configuration.CacheName = "demoCache";
configuration.EnableLogs = true;
configuration.ExceptionsEnabled = true;
});
}
Ajouter un assistant de balise de cache distribué à la classe d'affichage
Une fois NCache Lorsque les services ont été configurés pour la mise en cache des réponses, vous pouvez désormais spécifier le contenu spécifique des vues du contrôleur que vous souhaitez mettre en cache. ASPIC.NET Core fournit Assistant de balise de cache distribué pour ajouter des balises avec des paramètres au Vues qui mettra en cache le contenu marqué dans le cache configuré.
L'exemple suivant ajoute le <distributed-cache>
balise au contenu dans Vues -> À propos.cshtml avec des paramètres variables. Lors de l'actualisation de l'application, le contenu, l'élément normal, changera en fonction de DateTime.Now
, tandis que le contenu balisé restera statique lorsqu'il sera mis en cache.
La
expires-after
L'attribut spécifie l'expiration absolue du contenu. Cet élément sera supprimé du cache une fois que 10 secondes se seront écoulées. Cependant, si l'application est actualisée, les éléments sont rechargés dans le cache.La
name
L'attribut est l'identifiant unique du cache pour chaque instance de l'assistant de balise.La
vary-by
L'attribut conserve l'élément dans le cache jusqu'à ce que la chaîne de requête dans l'URL soit la même pour la valeur spécifiée dans cette balise.
Pour plus de détails sur les paramètres, reportez-vous au Documentation Microsoft pour les Tag Helpers avant de procéder.
Une fois l'application exécutée, vous pouvez surveiller les statistiques du cache via le NCache Centre de gestion/NCache Monitor pour Entreprise ou PerfMon Counters pour Professionnel.
@{
ViewData["Title"] = "About";
}
<h2>@ViewData["Title"]</h2>
<h3>@ViewData["Message"]</h3>
<p> The value for this item will change everytime the application is refreshed.</p>
<div>@DateTime.Now.ToString()</div><br />
<p>The value for this item will be static and remain in the cache forever, unless cache is cleared.</p>
<distributed-cache name="Key:1" >
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static upon refreshing the application, but it will expire after 10 seconds.</p>
<distributed-cache name="Key:2" expires-after ="TimeSpan.FromSeconds(10)">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
<p>The value for this item will be static and will only be removed from cache if the "vary-by" value is changed.</p>
<distributed-cache name="Key:3" vary-by ="test">
<div>@DateTime.Now.ToString()</div><br />
</distributed-cache>
Ressources additionnelles
NCache fournit un exemple d'application pour la mise en cache des réponses sur GitHub.
Voir aussi
.RAPPORTER: Alachisoft.NCache.ResponseCaching ; espace de noms.