Delen via


ASP.NET-uitvoercacheprovider voor Azure Cache voor Redis

De Redis Output Cache Provider is een out-of-process storage-mechanisme voor uitvoercachegegevens. Deze gegevens zijn specifiek bedoeld voor volledige HTTP-antwoorden (caching van pagina-uitvoer). De provider sluit aan op het nieuwe uitbreidbaarheidspunt van de uitvoercacheprovider dat is geïntroduceerd in ASP.NET 4.

Zie Output Caching in ASP.NET core met Redis in .NET 8 voor ASP.NET Core-toepassingen.

Als u de Redis Output Cache Provider wilt gebruiken, configureert u eerst uw cache en configureert u vervolgens uw ASP.NET-toepassing met behulp van het NuGet-pakket redis-uitvoercacheprovider. Dit artikel bevat richtlijnen voor het configureren van uw toepassing voor het gebruik van de Redis Output Cache Provider. Zie Een cache maken voor meer informatie over het maken en configureren van een Azure Cache voor Redis exemplaar.

Uitvoer van ASP.NET basispagina opslaan in Redis

Zie ASP.NET kernuitvoercache voor een volledige functiespecificatie.

Zie .NET 8-webtoepassing met Redis Output Caching en Azure OpenAI voor voorbeeldtoepassingen waarin het gebruik wordt gedemonstreerd.

Uitvoer van ASP.NET pagina opslaan in Redis

Als u een clienttoepassing in Visual Studio wilt configureren met behulp van het NuGet-pakket Azure Cache voor Redis Sessiestatus, selecteert u NuGet Pakketbeheer Pakketbeheer Console in het menu Extra.

Voer de volgende opdracht uit vanuit het venster Package Manager Console:

Install-Package Microsoft.Web.RedisOutputCacheProvider

Het NuGet-pakket redis-uitvoercacheprovider heeft een afhankelijkheid van het StackExchange.Redis-pakket . Als het StackExchange.Redis-pakket niet aanwezig is in uw project, wordt het geïnstalleerd. Zie de NuGet-pagina RedisOutputCacheProvider NuGet voor meer informatie over het NuGet-pakket redis-uitvoercacheprovider.

Het NuGet-pakket downloadt en voegt de vereiste assemblyverwijzingen toe en voegt de volgende sectie toe aan uw web.config-bestand. Deze sectie bevat de vereiste configuratie voor uw ASP.NET-toepassing voor het gebruik van de Redis-uitvoercacheprovider.

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

Configureer de kenmerken in de eerste kolom met de waarden uit uw cache in Microsoft Azure Portal. Configureer ook de andere waarden die u wilt. Zie Azure Cache voor Redis-instellingen configureren voor instructies over het openen van uw cache-eigenschappen.

Kenmerk Type Default Beschrijving
_gastheer* tekenreeks "localhost" Het IP-adres of de hostnaam van de Redis-server
port positief geheel getal 6379 (niet-TLS/SSL)
6380 (TLS/SSL)
Redis-serverpoort
accessKey tekenreeks "" Redis-serverwachtwoord wanneer Redis-autorisatie is ingeschakeld. De waarde is standaard een lege tekenreeks, wat betekent dat de sessiestatusprovider geen wachtwoord gebruikt wanneer deze verbinding maakt met de Redis-server. Als uw Redis-server zich in een openbaar toegankelijk netwerk bevindt, zoals Azure Cache voor Redis, moet u Redis-autorisatie inschakelen om de beveiliging te verbeteren en een beveiligd wachtwoord op te geven.
ssl boolean vals Of u via TLS verbinding wilt maken met Redis-server. Deze waarde is standaard onwaar omdat Redis tls niet standaard ondersteunt. Als u Azure Cache voor Redis gebruikt, die standaard SSL ondersteunt, moet u deze waarde instellen op waar om de beveiliging te verbeteren.

De niet-TLS-poort is standaard uitgeschakeld voor nieuwe caches. Geef waar op voor deze instelling om de niet-TLS-poort te gebruiken. Zie de sectie Toegangspoorten in het artikel Een cache configureren voor meer informatie over het inschakelen van de niet-TLS-poort.
databaseIdNumber positief geheel getal 0 Dit kenmerk kan alleen worden opgegeven via web.config of AppSettings.

Geef op welke Redis-database moet worden gebruikt.
connectionTimeoutInMilliseconds positief geheel getal Geleverd door StackExchange.Redis Wordt gebruikt om ConnectTimeout in te stellen bij het maken van StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds positief geheel getal Geleverd door StackExchange.Redis Wordt gebruikt om SyncTimeout in te stellen bij het maken van StackExchange.Redis.ConnectionMultiplexer.
connectionString (geldige StackExchange.Redis-verbindingsreeks) tekenreeks n.v.t Een parameterverwijzing naar AppSettings of web.config, of een geldige StackExchange.Redis-verbindingsreeks. Dit kenmerk kan waarden bieden voor host-, poort-, accessKey-, ssl- en andere StackExchange.Redis-kenmerken. Zie ConnectionString instellen in de sectie Kenmerknotities voor een beter overzicht van connectionString.
settingsClassName
settingsMethodName
tekenreeks
tekenreeks
n.v.t Deze kenmerken kunnen alleen worden opgegeven via web.config of AppSettings.

Gebruik deze kenmerken om een verbindingsreeks op te geven. _settingsClassName* moet een gekwalificeerde assemblyklassenaam zijn die de methode bevat die is opgegeven door settingsMethodName.

De methode die is opgegeven door settingsMethodName moet openbaar, statisch en ongeldig zijn (geen parameters accepteren), met een retourtype tekenreeks. Met deze methode wordt de werkelijke verbindingsreeks geretourneerd.
loggingClassName
loggingMethodName
tekenreeks
tekenreeks
n.v.t Deze kenmerken kunnen alleen worden opgegeven via web.config of AppSettings.

Gebruik deze kenmerken om fouten in uw toepassing op te sporen door logboeken op te geven uit sessiestatus/uitvoercache, samen met logboeken van StackExchange.Redis. loggingClassName moet een gekwalificeerde assemblyklassenaam zijn die de methode bevat die is opgegeven door loggingMethodName.

De methode die is opgegeven door loggingMethodName moet openbaar, statisch en ongeldig zijn (geen parameters accepteren), met een retourtype System.IO.TextWriter.
applicationName tekenreeks De modulenaam van het huidige proces of '/' Alleen SessionStateProvider
Dit kenmerk kan alleen worden opgegeven via web.config of AppSettings.

Het voorvoegsel van de app-naam dat moet worden gebruikt in redis-cache. De klant kan dezelfde Redis-cache gebruiken voor verschillende doeleinden. Om ervoor te zorgen dat de sessiesleutels niet botsen, kan deze worden voorafgegaan door de naam van de toepassing.
throwOnError boolean true Alleen SessionStateProvider
Dit kenmerk kan alleen worden opgegeven via web.config of AppSettings.

Of er een uitzondering moet worden gegenereerd wanneer er een fout optreedt.

Zie Notities over throwOnError in de sectie Kenmerknotities voor meer informatie over throwOnError.
retryTimeoutInMilliseconds positief geheel getal 5000 Alleen SessionStateProvider
Dit kenmerk kan alleen worden opgegeven via web.config of AppSettings.

Hoe lang het duurt om het opnieuw te proberen wanneer een bewerking mislukt. Als deze waarde kleiner is dan operationTimeoutInMilliseconds, probeert de provider het niet opnieuw.

Zie Notities over retryTimeoutInMilliseconds in de sectie Kenmerknotities voor meer informatie over retryTimeoutInMilliseconds.
redisSerializerType tekenreeks n.v.t Hiermee geeft u de naam van het gekwalificeerde assemblytype op van een klasse die Microsoft.Web.Redis implementeert. Serializer en die de aangepaste logica bevat om de waarden te serialiseren en deserialiseren. Zie About redisSerializerType in de sectie Kenmerknotities voor meer informatie.

Kenmerknotities

ConnectionString instellen

De waarde van connectionString wordt gebruikt als sleutel om de werkelijke verbindingsreeks op te halen uit AppSettings, als een dergelijke tekenreeks in AppSettings bestaat. Als deze niet in AppSettings wordt gevonden, wordt de waarde van connectionString gebruikt als sleutel om werkelijke verbindingsreeks op te halen uit de sectie web.config ConnectionString, als deze sectie bestaat. Als de verbindingsreeks niet bestaat in AppSettings of de sectie web.config ConnectionString, wordt de letterlijke waarde van connectionString gebruikt als de verbindingsreeks bij het maken van StackExchange.Redis.ConnectionMultiplexer.

In de volgende voorbeelden ziet u hoe connectionString wordt gebruikt.

Voorbeeld 1

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

Gebruik web.configde sleutel als parameterwaarde in plaats van de werkelijke waarde.

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

Voorbeeld 2

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

Gebruik web.configde sleutel als parameterwaarde in plaats van de werkelijke waarde.

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

Voorbeeld 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>

Notities over throwOnError

Als er momenteel een fout optreedt tijdens een sessiebewerking, genereert de provider van de sessiestatus een uitzondering. Als u de uitzondering genereert, wordt de toepassing afgesloten.

Dit gedrag is gewijzigd op een manier die ondersteuning biedt voor de verwachtingen van bestaande gebruikers van ASP.NET sessiestatusprovider, terwijl u ook kunt reageren op uitzonderingen. Het standaardgedrag genereert nog steeds een uitzondering wanneer er een fout optreedt, consistent met andere ASP.NET sessiestatusproviders. Bestaande code moet hetzelfde werken als voorheen.

Als u throwOnError instelt op false, mislukt deze op de achtergrond in plaats van een uitzondering te genereren wanneer er een fout optreedt. Controleer de statische eigenschap Microsoft.Web.Redis.Redis.Redis.RedisSessionStateProvider.LastException om te zien of er een fout is opgetreden. Als dit het probleem is, controleert u de statische eigenschap Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Notities over retryTimeoutInMilliseconds

De instelling retryTimeoutInMilliseconds biedt een aantal logica om het geval te vereenvoudigen waarbij een sessiebewerking opnieuw moet worden geprobeerd vanwege een netwerkstoring of iets anders. Met de instelling retryTimeoutInMilliseconds kunt u ook de time-out voor opnieuw proberen beheren of volledig afmelden voor nieuwe pogingen.

Als u retryTimeoutInMilliseconds instelt op een getal, bijvoorbeeld 2000, wordt opnieuw geprobeerd om een sessiebewerking uit te voeren voor 2000 milliseconden voordat deze als een fout wordt behandeld. Als u wilt dat de sessiestatusprovider deze logica voor opnieuw proberen toepast, configureert u de time-out. De eerste nieuwe poging vindt plaats na 20 milliseconden, wat in de meeste gevallen voldoende is wanneer er een netwerkfout optreedt. Daarna wordt elke seconde opnieuw geprobeerd totdat er een time-out optreedt. Direct na de time-out wordt er nog een keer geprobeerd om ervoor te zorgen dat de time-out niet met (maximaal) één seconde wordt afgekapt.

Als u niet denkt dat u het opnieuw moet proberen of als u de logica voor opnieuw proberen zelf wilt afhandelen, stelt u retryTimeoutInMilliseconds in op 0. Het is bijvoorbeeld mogelijk dat u het niet opnieuw wilt proberen wanneer u de Redis-server uitvoert op dezelfde computer als uw toepassing.

Over redisSerializerType

De serialisatie voor het opslaan van de waarden in Redis wordt standaard uitgevoerd in een binaire indeling, die wordt geleverd door de klasse BinaryFormatter . Gebruik redisSerializerType om de naam van het gekwalificeerde assemblytype op te geven van een klasse die Microsoft.Web.Redis.ISerializer implementeert en de aangepaste logica heeft om de waarden te serialiseren en deserialiseren. Hier volgt bijvoorbeeld een Json-serializerklasse met behulp van 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);
        }
    }
}

Ervan uitgaande dat deze klasse is gedefinieerd in een assembly met de naam MyCompanyDll, kunt u de parameter redisSerializerType instellen om deze te gebruiken:

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

Uitvoercacherichtlijn

Voeg een OutputCache-instructie toe aan elke pagina waarvoor u de uitvoer in de cache wilt opslaan.

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

In het vorige voorbeeld blijven de paginagegevens in de cache 60 seconden in de cache en wordt voor elke parametercombinatie een andere versie van de pagina in de cache opgeslagen. Zie @OutputCache voor meer informatie over de OutputCache-instructie.

Nadat u deze stappen hebt uitgevoerd, is uw toepassing geconfigureerd voor het gebruik van de Redis Output Cache-provider.

Externe uitvoercacheproviders

Bekijk de ASP.NET Session State Provider voor Azure Cache voor Redis.