ASP.NET Uitvoercacheprovider voor Azure Cache voor Redis

De Redis Output Cache Provider is een out-of-process opslagmechanisme voor uitvoercachegegevens. Deze gegevens zijn specifiek voor volledige HTTP-antwoorden (caching van pagina-uitvoer). De provider wordt aangesloten op het nieuwe uitvoercacheprovideruitvoerpunt dat is geïntroduceerd in ASP.NET 4. Lees ASP.NET Core antwoord in de ASP.NET Core voor meer ASP.NET Core.

Als u de Redis Output Cache Provider wilt gebruiken, moet u eerst uw cache configureren en vervolgens uw ASP.NET-toepassing configureren met het NuGet-pakket Redis Output Cache Provider. 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 Azure Cache voor Redis maken en configureren van een exemplaar.

Uitvoer ASP.NET pagina opslaan in de cache

Als u een clienttoepassing in Visual Studio wilt configureren met het nuGet-pakket Azure Cache voor Redis Session State, 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 van de Redis-uitvoercacheprovider is afhankelijk van het StackExchange.Redis-pakket. Als het pakket StackExchange.Redis niet aanwezig is in uw project, wordt het geïnstalleerd. Zie de NuGet-pagina RedisOutputCacheProvider voor meer informatie over het NuGet-pakket redis Output Cache Provider.

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 om de Redis Output Cache Provider te gebruiken.

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

Configureer de kenmerken aan de linkerkant met de waarden uit uw cache in Microsoft Azure portal. Configureer ook de andere waarden die u wilt. Zie Configure Azure Cache voor Redis settings (Instellingen voor het configureren van uw cache Azure Cache voor Redis voor instructies over het openen van uw cache-eigenschappen.

Kenmerk Type Standaard Beschrijving
Host tekenreeks 'localhost' Het IP-adres of de hostnaam van de Redis-server
Poort positief geheel getal 6379 (niet-TLS/SSL)
6380 (TLS/SSL)
Redis-serverpoort
Accesskey tekenreeks "" Het wachtwoord van de Redis-server wanneer Redis-autorisatie is ingeschakeld. De waarde is standaard een lege tekenreeks, wat betekent dat de sessietoestandprovider geen wachtwoord gebruikt wanneer deze verbinding maakt met de Redis-server. Als uw Redis-server zich in een openbaar toegankelijk netwerk, zoals Azure Cache voor Redis, moet u Redis-autorisatie inschakelen om de beveiliging te verbeteren en een veilig wachtwoord opgeven.
Ssl booleaans Valse Of u verbinding wilt maken met de Redis-server via TLS. Deze waarde is standaard onwaar omdat Redis standaard geen ondersteuning biedt voor TLS. Als u een Azure Cache voor Redis, die standaard SSL ondersteunt, moet u deze waarde instellen op true 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.
connectionTimeoutIn Millisecondiseconds positief geheel getal Geleverd door StackExchange.Redis Wordt gebruikt om ConnectTimeout in te stellen bij het maken van StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutIn Milliseconds 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 connection string) tekenreeks N/a Een parameterverwijzing naar AppSettings of web.config, of een geldige StackExchange.Redis-connection string. Dit kenmerk kan waarden voor host, poort, accessKey, ssl en andere StackExchange.Redis-kenmerken bevatten. Zie Setting connectionString in de sectie Attribute notes (Verbindingsreeks instellen in de sectie Kenmerknotities) voor een beter onderzoek van connectionString.
settingsClassName
settingsMethodName
tekenreeks
tekenreeks
N/a Deze kenmerken kunnen alleen worden opgegeven via web.config of AppSettings.

Gebruik deze kenmerken om een connection string. settingsClassName moet een door assembly gekwalificeerde klassenaam zijn die de methode bevat die is opgegeven door settingsMethodName.

De methode die is opgegeven door settingsMethodName moet openbaar, statisch en void zijn (zonder parameters te accepteren), met een retourtype van tekenreeks. Deze methode retourneert de werkelijke connection string.
loggingClassName
loggingMethodName
tekenreeks
tekenreeks
N/a 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 sessietoestand/uitvoercache, samen met logboeken van StackExchange.Redis. loggingClassName moet een door assembly gekwalificeerde klassenaam zijn die de methode bevat die is opgegeven door loggingMethodName.

De methode die is opgegeven door loggingMethodName moet openbaar, statisch en void zijn (accepteer geen parameters), met het 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 met elkaar in contact komen, kan er een voorvoegsel worden gegeven met de naam van de toepassing.
throwOnError booleaans true Alleen SessionStateProvider
Dit kenmerk kan alleen worden opgegeven via web.config of AppSettings.

Geeft aan of er een uitzondering moet worden weergegeven wanneer er een fout optreedt.

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

Hoe lang moet worden uitgevoerd wanneer een bewerking mislukt. Als deze waarde kleiner is dan operationTimeoutIn Millisecondiseconden, zal de provider het niet opnieuw proberen.

Zie Notities over retryTimeoutIn Milliseconds in de sectie Kenmerknotities voor meer informatie over retryTimeoutIn Millisecondiseconds.
redisSerializerType tekenreeks N/a Hiermee geeft u de assembly gekwalificeerde typenaam van een klasse die Microsoft.Web.Redis implementeert. Serializer en die de aangepaste logica bevat voor het serialiseren en deserialiseren van de waarden. Zie Over redisSerializerType in de sectie Kenmerknotities voor meer informatie.

Kenmerknotities

ConnectionString instellen

De waarde van connectionString wordt gebruikt als sleutel voor het ophalen van de werkelijke connection string uit AppSettings, als een dergelijke tekenreeks bestaat in AppSettings. Als deze niet wordt gevonden in AppSettings, wordt de waarde van connectionString gebruikt als sleutel voor het ophalen van de werkelijke connection string uit de sectie web.config ConnectionString, als die sectie bestaat. Als de connection string niet bestaat in AppSettings of de sectie web.config ConnectionString, wordt de letterlijke waarde van connectionString gebruikt als de connection string 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.config in de bovenstaande sleutel als parameterwaarde in plaats van de werkelijke waarde.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvide"
             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.config in de bovenstaande sleutel als parameterwaarde in plaats van de werkelijke waarde.

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

Voorbeeld 3

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

Notities over throwOnError

Als er op dit moment een fout optreedt tijdens een sessiebewerking, wordt door de sessietoestandprovider een uitzondering veroorzaakt. Als de uitzondering wordt geseed, wordt de toepassing afgesloten.

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

Als u throwOnError in stelt op false, mislukt dit op de stille afstand in plaats van een uitzondering te geven wanneer er een fout optreedt. Controleer de statische eigenschap Microsoft.Web.Redis.RedisSessionStateProvider.LastException om te zien of er een fout is opgetreden en zo ja, wat de uitzondering was.

Opmerkingen bij retryTimeoutIn Millisecondiseconden

De instelling retryTimeoutIn Milliseconds biedt enige logica om het geval te vereenvoudigen waarbij een sessiebewerking opnieuw moet worden uitgevoerd vanwege een netwerkfout of iets anders. Met de instelling retryTimeoutIn Milliseconds kunt u ook de time-out voor opnieuw proberen bepalen of ervoor kiezen om het opnieuw proberen volledig uit te stellen.

Als u retryTimeoutIn Millisecondiseconden in stelt op een getal, bijvoorbeeld 2000, wordt een sessiebewerking na 2000 milliseconden opnieuw uitgevoerd voordat deze als een fout wordt behandeld. Configureer de time-out om de sessietoestandprovider deze logica voor opnieuw proberen te laten toepassen. De eerste poging vindt plaats na 20 milliseconden, wat in de meeste gevallen voldoende is wanneer er een netwerkfout wordt gemaakt. Daarna wordt elke seconde opnieuw een poging gedaan totdat er een times-out is. Direct na de time-out wordt opnieuw een nieuwe poging onder de tijd uitgevoerd om ervoor te zorgen dat de time-out niet met (ten zeerste) één seconde wordt afgesloten.

Als u denkt dat u geen nieuwe poging hoeft te doen of als u de logica voor opnieuw proberen zelf wilt afhandelen, stelt u retryTimeoutIn Millisecondiseconden in op 0. Het is bijvoorbeeld mogelijk dat u niet opnieuw wilt proberen wanneer u de Redis-server op dezelfde computer als uw toepassing gebruikt.

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 gekwalificeerde assemblytypenaam op te geven van een klasse die Microsoft.Web.Redis.ISerializer implementeert en de aangepaste logica heeft voor het serialiseren en deserialiseren van de waarden. Hier is bijvoorbeeld een Json-serialisatieklasse die gebruik 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>

Cache-richtlijn voor uitvoer

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

<%@ 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 voor meer informatie over de OutputCache-richtlijn. @OutputCache

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

Externe uitvoercacheproviders

Volgende stappen

Bekijk de ASP.NET sessie state provider voor Azure Cache voor Redis.