Dela via


Leverantör av ASP.NET cache för utdata för Azure Cache for Redis

Redis-utdatacacheprovidern är en out-of-process-lagringsmekanism för cachedata för utdata. Dessa data är specifikt för fullständiga HTTP-svar (cachelagring av sidutdata). Providern ansluter till den nya utdatacacheproviderns utökningspunkt som introducerades i ASP.NET 4.

Information om ASP.NET Core-program finns i Cachelagring av utdata i ASP.NET kärna med Redis i .NET 8.

Om du vill använda Redis-utdatacacheprovidern konfigurerar du först cachen och konfigurerar sedan ditt ASP.NET-program med hjälp av NuGet-paketet för Redis-utdatacacheprovidern. Den här artikeln innehåller vägledning om hur du konfigurerar ditt program så att det använder Redis-utdatacacheprovidern. Mer information om hur du skapar och konfigurerar en Azure Managed Redis-instans (förhandsversion) finns i Skapa en cache.

Lagra ASP.NET grundläggande sidutdata i Redis

En fullständig funktionsspecifikation finns i ASP.NET cachelagring av kärnutdata.

Exempelprogram som visar användningen finns i .NET 8-webbprogram med Redis-utdatacachelagring och Azure OpenAI.

Lagra ASP.NET sidutdata i Redis

Om du vill konfigurera ett klientprogram i Visual Studio med hjälp av NuGet-paketet för Sessionstillstånd för Azure Cache for Redis väljer du NuGet Package Manager, Package Manager Console på verktygsmenyn.

Kör följande kommando från fönstret Package Manager Console:

Install-Package Microsoft.Web.RedisOutputCacheProvider

NuGet-paketet för Redis-utdatacacheprovidern har ett beroende av StackExchange.Redis-paketet . Om StackExchange.Redis-paketet inte finns i projektet installeras det. Mer information om NuGet-paketet för Redis-utdatacacheprovider finns på sidan RedisOutputCacheProvider NuGet.

NuGet-paketet laddar ned och lägger till nödvändiga sammansättningsreferenser och lägger till följande avsnitt i filen web.config. Det här avsnittet innehåller den konfiguration som krävs för att ditt ASP.NET program ska kunna använda Redis-utdatacacheprovidern.

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

Konfigurera attributen i den första kolumnen med värdena från cacheminnet i Microsoft Azure Portal. Konfigurera även de andra värden som du vill använda. Anvisningar om hur du kommer åt dina cacheegenskaper finns i Konfigurera Azure Cache for Redis-inställningar.

Attribut Typ Standardvärde beskrivning
_värd* sträng "localhost" Redis-serverns IP-adress eller värdnamn
port positivt heltal 6379 (icke-TLS/SSL)
6380 (TLS/SSL)
10000 för Redis Enterprise och Azure Managed Redis (förhandsversion)
Redis-serverport
accessKey sträng "" Redis-serverlösenord när Redis-auktorisering är aktiverat. Värdet är en tom sträng som standard, vilket innebär att sessionstillståndsprovidern inte använder något lösenord när den ansluter till Redis-servern. Om Redis-servern finns i ett offentligt tillgängligt nätverk som Azure Cache for Redis måste du aktivera Redis-auktorisering för att förbättra säkerheten och ange ett säkert lösenord.
ssl boolean falsk Om du vill ansluta till Redis-servern via TLS. Det här värdet är falskt som standard eftersom Redis inte stöder TLS som standard. Om du använder Azure Cache for Redis, som stöder SSL som standard, måste du ange värdet true för att förbättra säkerheten.

Icke-TLS-porten är inaktiverad som standard för nya cacheminnen. Ange true för den här inställningen för att använda icke-TLS-porten. Mer information om hur du aktiverar icke-TLS-porten finns i avsnittet Åtkomstportar i artikeln Konfigurera en cache .
databaseIdNumber positivt heltal 0 Det här attributet kan endast anges via web.config eller AppSettings.

Ange vilken Redis-databas som ska användas.
connectionTimeoutInMilliseconds positivt heltal Tillhandahålls av StackExchange.Redis Används för att ange ConnectTimeout när du skapar StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds positivt heltal Tillhandahålls av StackExchange.Redis Används för att ställa in SyncTimeout när du skapar StackExchange.Redis.ConnectionMultiplexer.
connectionString (Giltig StackExchange.Redis anslutningssträng) sträng n/a Antingen en parameterreferens till AppSettings eller web.config eller en giltig StackExchange.Redis-anslutningssträng. Det här attributet kan ge värden för värden, porten, accessKey, ssl och andra StackExchange.Redis-attribut. En närmare titt på connectionString finns i Ange connectionString i avsnittet Attributanteckningar.
settingsClassName
settingsMethodName
sträng
sträng
n/a Dessa attribut kan endast anges via web.config eller AppSettings.

Använd dessa attribut för att tillhandahålla en anslutningssträng. _settingsClassName* ska vara ett sammansättningskvalificerat klassnamn som innehåller den metod som anges av settingsMethodName.

Metoden som anges av settingsMethodName ska vara offentlig, statisk och tom (accepterar inga parametrar) med en returtyp av sträng. Den här metoden returnerar den faktiska anslutningssträng.
loggningClassName
loggingMethodName
sträng
sträng
n/a Dessa attribut kan endast anges via web.config eller AppSettings.

Använd dessa attribut för att felsöka ditt program genom att tillhandahålla loggar från Sessionstillstånd/Utdatacache tillsammans med loggar från StackExchange.Redis. loggingClassName ska vara ett sammansättningskvalificerat klassnamn som innehåller den metod som anges av loggingMethodName.

Metoden som anges av loggingMethodName ska vara offentlig, statisk och tom (acceptera inga parametrar) med en returtyp av System.IO.TextWriter.
applicationName sträng Modulnamnet för den aktuella processen eller "/" Endast SessionStateProvider
Det här attributet kan endast anges via web.config eller AppSettings.

Appnamnprefixet som ska användas i Redis-cachen. Kunden kan använda samma Redis-cache för olika ändamål. För att säkerställa att sessionsnycklarna inte kolliderar kan det prefixas med programnamnet.
throwOnError boolean true Endast SessionStateProvider
Det här attributet kan endast anges via web.config eller AppSettings.

Om ett undantag ska utlösas när ett fel inträffar.

Mer information om throwOnError finns i Anteckningar om throwOnError i avsnittet Attributanteckningar.
retryTimeoutInMilliseconds positivt heltal 5000 Endast SessionStateProvider
Det här attributet kan endast anges via web.config eller AppSettings.

Hur lång tid det tar att försöka igen när en åtgärd misslyckas. Om det här värdet är mindre än operationTimeoutInMilliseconds försöker providern inte igen.

Mer information om retryTimeoutInMilliseconds finns i Anteckningar om retryTimeoutInMilliseconds i avsnittet Attributanteckningar.
redisSerializerType sträng n/a Anger det sammansättningskvalificerade typnamnet för en klass som implementerar Microsoft.Web.Redis. Serialiserare och som innehåller den anpassade logiken för att serialisera och deserialisera värdena. Mer information finns i Om redisSerializerType i avsnittet Attributanteckningar.

Attributanteckningar

Ange connectionString

Värdet för connectionString används som nyckel för att hämta den faktiska anslutningssträng från AppSettings, om det finns en sådan sträng i AppSettings. Om det inte hittas i AppSettings används värdet för connectionString som nyckel för att hämta faktiska anslutningssträng från avsnittet web.config ConnectionString, om det avsnittet finns. Om anslutningssträng inte finns i AppSettings eller avsnittet web.config ConnectionString används literalvärdet för connectionString som anslutningssträng när du skapar StackExchange.Redis.ConnectionMultiplexer.

Följande exempel illustrerar hur connectionString används.

Exempel 1

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

I web.configanvänder du nyckeln som parametervärde i stället för det faktiska värdet.

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

Exempel 2

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

I web.configanvänder du nyckeln som parametervärde i stället för det faktiska värdet.

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

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

Anteckningar om throwOnError

Om ett fel inträffar under en sessionsåtgärd utlöser sessionstillståndsprovidern för närvarande ett undantag. Om du utlöser undantaget stängs programmet av.

Det här beteendet ändrades på ett sätt som stöder förväntningarna hos befintliga användare av ASP.NET sessionstillståndsprovider samtidigt som du kan agera på undantag. Standardbeteendet utlöser fortfarande ett undantag när ett fel inträffar, i överensstämmelse med andra ASP.NET sessionstillståndsprovidrar. Befintlig kod bör fungera på samma sätt som tidigare.

Om du anger throwOnError till false misslyckas det tyst i stället för att utlösa ett undantag när ett fel inträffar. Om du vill se om det uppstod ett fel och i så fall identifiera vad undantaget var kontrollerar du den statiska egenskapen Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Anteckningar om retryTimeoutInMilliseconds

Inställningen retryTimeoutInMilliseconds tillhandahåller viss logik för att förenkla fallet där en sessionsåtgärd ska försöka igen vid fel på grund av ett nätverksfel eller något annat. Med inställningen retryTimeoutInMilliseconds kan du också styra tidsgränsen för återförsök eller helt välja bort omförsök.

Om du anger retryTimeoutInMilliseconds till ett tal, till exempel 2000, när en sessionsåtgärd misslyckas, försöker den igen i 2 000 millisekunder innan den behandlas som ett fel. Om du vill att sessionstillståndsprovidern ska tillämpa den här logiken för återförsök konfigurerar du bara tidsgränsen. Det första återförsöket sker efter 20 millisekunder, vilket i de flesta fall räcker när ett nätverksfel inträffar. Därefter försöker den igen varje sekund tills tidsgränsen uppnås. Direkt efter tidsgränsen försöker den igen en gång till för att se till att tidsgränsen inte avbryts med (högst) en sekund.

Om du inte tror att du behöver försöka igen eller om du vill hantera logiken för återförsök själv anger du retryTimeoutInMilliseconds till 0. Du kanske till exempel inte vill försöka igen när du kör Redis-servern på samma dator som ditt program.

Om redisSerializerType

Serialiseringen för att lagra värdena på Redis görs som standard i binärt format, vilket tillhandahålls av klassen BinaryFormatter . Använd redisSerializerType för att ange det sammansättningskvalificerade typnamnet för en klass som implementerar Microsoft.Web.Redis.ISerializer och har den anpassade logiken för att serialisera och deserialisera värdena. Här är till exempel en Json-serialiserarklass med 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);
        }
    }
}

Förutsatt att den här klassen har definierats i en sammansättning med namnet MyCompanyDll kan du ange att parametern redisSerializerType ska använda den:

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

Utdatacachedirektiv

Lägg till ett OutputCache-direktiv på varje sida som du vill cachelagrat utdata för.

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

I föregående exempel finns cachelagrade siddata kvar i cacheminnet i 60 sekunder och en annan version av sidan cachelagras för varje parameterkombination. Mer information om OutputCache-direktivet finns i @OutputCache.

När du har vidtagit de här stegen är programmet konfigurerat för att använda Redis-utdatacacheprovidern.

Cacheprovidrar för utdata från tredje part

Kolla in ASP.NET Sessionstillståndsprovider för Azure Cache for Redis.