Partager via


Fournisseur de caches de sortie ASP.NET pour le Cache Azure pour Redis

Le fournisseur de caches de sortie Redis est un mécanisme de stockage hors processus pour les données de cache de sortie. Ces données concernent spécialement les réponses HTTP complètes (mise en cache de la sortie de pages). Le fournisseur se connecte au nouveau point d'extension du fournisseur de caches de sortie introduit dans ASP.NET 4.

Pour les applications ASP.NET Core, consultez Mise en cache de la sortie dans ASP.NET Core à l’aide de Redis dans .NET 8.

Pour utiliser le fournisseur de caches de sortie Redis, configurez d’abord votre cache, puis configurez votre application ASP.NET en utilisant le package NuGet du fournisseur de caches de sortie Redis. Cet article fournit des conseils sur la configuration de votre application pour utiliser le fournisseur de caches de sortie Redis.

Stocker la sortie de page ASP.NET Core dans Redis

Pour obtenir une spécification complète des fonctionnalités, consultez Mise en cache de la sortie ASP.NET Core.

Pour obtenir un exemple d’application illustrant l’utilisation, consultez Application web .NET 8 avec mise en cache de la sortie Redis et Azure OpenAI.

Stocker la sortie de page ASP.NET dans Redis

Pour configurer une application cliente dans Visual Studio avec le package NuGet de l’État de session du Cache Azure pour Redis, sélectionnez Gestionnaire de package NuGet, Console du Gestionnaire de package dans le menu Outils.

Exécutez la commande suivante depuis la fenêtre Package Manager Console :

Install-Package Microsoft.Web.RedisOutputCacheProvider

Le package NuGet du fournisseur de cache de sortie Redis a une dépendance sur le package StackExchange.Redis. Si le package StackExchange.Redis n'est pas présent dans votre projet, il est installé. Pour plus d’informations sur le package NuGet du fournisseur de caches de sortie Redis, consultez la page NuGet RedisOutputCacheProvider.

Le package NuGet télécharge et ajoute les références d’assembly nécessaires et ajoute la section suivante dans votre fichier web.config. Cette section contient la configuration requise pour que votre application ASP.NET utilise le fournisseur de cache de sortie Redis.

<caching>
  <outputCache defaultProvider="MyRedisOutputCache">
    <providers>
      <add name="MyRedisOutputCache" type="Microsoft.Web.Redis.RedisOutputCacheProvider"
           host=""
           accessKey=""
           ssl="true" />
    </providers>
  </outputCache>
</caching>

Configurez les attributs de la première colonne avec les valeurs de votre cache dans le portail Microsoft Azure. En outre, configurez les autres valeurs souhaitées. Pour obtenir des instructions sur l’accès aux propriétés de votre cache, voir Configurer les paramètres du Cache Azure pour Redis.

Attribut Type Default Description
_host* string "localhost" Le nom hôte ou l’adresse IP du serveur Redis
port entier positif 6379 (non TLS/SSL)
6380 (TLS/SSL)
10 000 pour Redis Enterprise et Redis managé par Azure (préversion)
Port du serveur Redis
accessKey string "" Mot de passe Redis lorsque l’autorisation Redis est activée. La valeur est une chaîne vide par défaut, ce qui signifie que le fournisseur d’état de session n’utilise aucun mot de passe lorsqu’il se connecte au serveur Redis. Si votre serveur Redis se trouve sur un réseau accessible publiquement comme Azure Cache pour Redis, activez l’autorisation Redis pour améliorer la sécurité et fournir un mot de passe sécurisé.
ssl boolean false Indique s’il faut ou non se connecter au serveur Redis via TLS. La valeur est false par défaut, car Redis ne prend pas en charge TLS par défaut. Si vous utilisez Azure Cache pour Redis, qui prend en charge SSL par défaut, veillez à définir cette valeur sur true pour améliorer la sécurité.

Le port non TLS est désactivé par défaut pour les nouveaux caches. Spécifiez true pour ce paramètre afin d’utiliser le port non TLS. Pour plus d’informations sur l’activation du port non TLS, consultez la section relative aux ports d’accès dans l’article Configuration d’un cache.
databaseIdNumber entier positif 0 Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Spécifie la base de données Redis à utiliser.
connectionTimeoutInMilliseconds entier positif Fourni par StackExchange.Redis Permet de définir ConnectTimeout lors de la création de StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds entier positif Fourni par StackExchange.Redis Permet de définir SyncTimeout lors de la création de StackExchange.Redis.ConnectionMultiplexer.
connectionString (chaîne de connexion StackExchange.Redis valide) string n/a Référence de paramètre à AppSettings ou web.config, ou une chaîne de connexion StackExchange.Redis valide. Cet attribut peut fournir des valeurs pour l’hôte, la port, accessKey, sslet d’autres attributs de StackExchange.Redis. Pour plus de détail sur connectionString, consultez Paramétrage de connectionString dans la section Remarques sur les attributs.
settingsClassName
settingsMethodName
string
string
n/a Ces attributs peuvent uniquement être spécifiés par le biais de web.config ou AppSettings.

Utilisez ces attributs pour fournir une chaîne de connexion. _settingsClassName* doit être un nom de classe qualifié d'assembly qui contient la méthode spécifiée par settingsMethodName.

La méthode spécifiée par settingsMethodName doit être publique, statique et vide (sans aucun paramètre), avec un type de retour de chaîne. Cette méthode retourne la chaîne de connexion réelle.
loggingClassName
loggingMethodName
string
string
n/a Ces attributs peuvent uniquement être spécifiés par le biais de web.config ou AppSettings.

Utilisez ces attributs pour déboguer votre application en fournissant des journaux à partir du Cache de l’état de session/sortie, ainsi que des journaux à partir de StackExchange.Redis. loggingClassName doit être un nom de classe d’assembly qualifié qui contient la méthode spécifiée par loggingMethodName.

La méthode spécifiée par loggingMethodName doit être publique, statique et vide (sans aucun paramètre), avec un type de retour System.IO.TextWriter.
applicationName string Le nom du module du processus en cours ou « / » SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Le préfixe de nom d’application à utiliser dans le cache Redis. Le client peut utiliser le même cache Redis à des fins différentes. Pour vous assurer que les clés de session ne sont pas en collision, elles peuvent être précédées du nom de l’application.
throwOnError boolean true SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Indique s’il faut ou non lever une exception lorsqu’une erreur se produit.

Pour plus d’informations sur throwOnError, consultez Remarques sur throwOnError dans la section Remarques sur les attributs.
retryTimeoutInMilliseconds entier positif 5 000 SessionStateProvider uniquement
Cet attribut peut uniquement être spécifié par le biais de web.config ou AppSettings.

Combien de nouvelles tentatives en cas d’échec d’une opération. Si cette valeur est inférieure à operationTimeoutInMilliseconds, le fournisseur ne réessaye pas.

Pour plus d’informations sur retryTimeoutInMilliseconds, consultez Remarques sur retryTimeoutInMilliseconds dans la section Remarques sur les attributs.
redisSerializerType string n/a Spécifie le nom de type d’assembly qualifié d’une classe qui implémente Microsoft.Web.Redis. ISerializer et qui contient la logique personnalisée pour sérialiser et désérialiser les valeurs. Pour plus d’informations, consultez À propos de redisSerializerType dans la section Remarques sur les attributs.

Remarques sur les attributs

Paramétrage de connectionString

La valeur de connectionString est utilisée comme clé pour extraire la chaîne de connexion réelle d’AppSettings, si cette chaîne existe dans AppSettings. Si elle n'est pas trouvée dans AppSettings, la valeur de connectionString est utilisée comme clé pour récupérer la chaîne de connexion réelle à partir de la section ConnectionString web.config, si cette section existe. Si la chaîne de connexion n'existe pas dans AppSettings ou dans la section ConnectionString de web.config, la valeur littérale de connectionString est utilisée comme chaîne de connexion lors de la création de StackExchange.Redis.ConnectionMultiplexer.

Les exemples suivants illustrent comment connectionString est utilisé.

Exemple 1

<connectionStrings>
    <add name="MyRedisConnectionString" connectionString="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</connectionStrings>

Dans web.config, utilisez la clé comme valeur de paramètre au lieu de la valeur réelle.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Exemple 2

<appSettings>
    <add key="MyRedisConnectionString" value="mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False" />
</appSettings>

Dans web.config, utilisez la clé comme valeur de paramètre au lieu de la valeur réelle.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "MyRedisConnectionString"/>
    </providers>
</sessionState>

Exemple 3

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             connectionString = "mycache.redis.cache.windows.net:6380,password=actual access key,ssl=True,abortConnect=False"/>
    </providers>
</sessionState>

Remarques sur throwOnError

Actuellement, si une erreur se produit pendant une opération de session, le fournisseur d’état de session lève une exception. La levée de l’exception ferme l’application.

Ce comportement a été modifié de manière à prendre en charge les attentes des utilisateurs du fournisseur d'état de session ASP.NET existant tout en vous permettant également d'agir sur les exceptions. Le comportement par défaut lève toujours une exception lorsqu’une erreur se produit, de façon cohérente avec les autres fournisseurs d’état de session ASP.net. Le code existant doit fonctionner de la même façon qu’auparavant.

Si vous définissez throwOnError sur la valeur false, au lieu de lever une exception lorsqu’une erreur se produit, vous ne serez pas informé de l’échec. Pour voir si une erreur s’est produite et, dans ce cas, découvrir l’exception qui l’a provoquée, vérifiez la propriété statique Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Remarques sur retryTimeoutInMilliseconds

Le paramètre retryTimeoutInMilliseconds fournit une certaine logique pour simplifier le cas où une opération de session doit réessayer en cas d’échec en raison d’un problème réseau ou d’un autre point. Le paramètre retryTimeoutInMilliseconds vous permet également de contrôler le délai d’expiration des nouvelles tentatives ou de refuser complètement les nouvelles tentatives.

Si vous définissez retryTimeoutInMilliseconds sur un nombre, par exemple 2000, lorsqu’une opération de session échoue, elle retente pendant 2 000 millisecondes avant de la traiter comme une erreur. Pour que le fournisseur d’état de session applique cette logique de nouvelle tentative, il suffit de configurer le délai d’attente. La première nouvelle tentative aura lieu après 20 millisecondes, ce qui est suffisant dans la plupart des cas quand un problème réseau se produit. Après cela, il réessaiera toutes les secondes jusqu’à expiration. Juste après l’expiration, il réessaiera encore une fois pour s’assurer qu’il ne réduit pas le délai d’attente d’une seconde (au plus).

Si vous pensez avoir besoin de tenter de nouveau ou si vous voulez gérer la logique de nouvelle tentative vous même, définissez retryTimeoutInMilliseconds sur 0. Par exemple, vous ne souhaiterez peut-être pas réessayer lorsque vous exécutez le serveur Redis sur le même ordinateur que votre application.

À propos de redisSerializerType

La sérialisation pour stocker les valeurs sur Redis est effectuée dans un format binaire par défaut fourni par la classe BinaryFormatter. Utilisez redisSerializerType pour spécifier le nom de type d’assembly qualifié d’une classe qui implémente Microsoft.Web.Redis.ISerializer et possède la logique personnalisée pour sérialiser et désérialiser les valeurs. Par exemple, voici une classe de sérialiseur Json qui utilise JSON.NET :

namespace MyCompany.Redis
{
    public class JsonSerializer : ISerializer
    {
        private static JsonSerializerSettings _settings = new JsonSerializerSettings() { TypeNameHandling = TypeNameHandling.All };

        public byte[] Serialize(object data)
        {
            return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, _settings));
        }

        public object Deserialize(byte[] data)
        {
            if (data == null)
            {
                return null;
            }
            return JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), _settings);
        }
    }
}

En supposant que cette classe est définie dans un assembly avec pour nom MyCompanyDll, vous pouvez définir le paramètre redisSerializerType à utiliser :

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
             name = "MySessionStateStore"
             redisSerializerType = "MyCompany.Redis.JsonSerializer,MyCompanyDll"
             ... />
    </providers>
</sessionState>

Directive de cache de sortie

Ajoutez une directive OutputCache à chaque page pour laquelle vous voulez mettre en cache la sortie.

<%@ OutputCache Duration="60" VaryByParam="*" %>

Dans l’exemple précédent, les données de page mises en cache resteront dans le cache pendant 60 secondes et une version différente de la page est mise en cache pour chaque combinaison de paramètres. Pour plus d’informations sur la directive OutputCache, consultez @OutputCache.

Après avoir effectué ces étapes, votre application est configurée pour utiliser le fournisseur de caches de sortie Redis.

Fournisseur de caches de sortie tiers

Voir Fournisseur d’États de session ASP.NET pour le Cache Azure pour Redis.