ASP.NET Utdatacacheprovider för Azure Cache for Redis
Redis-utdatacacheprovidern är en processbaserad lagringsmekanism för utdatacachedata. Dessa data är specifikt för fullständiga HTTP-svar (cachelagring av sidutdata). Providern ansluts till den nya utdatacacheproviderns utökningspunkt som introducerades i ASP.NET 4. Mer ASP.NET Core program finns i Cachelagring av svar i ASP.NET Core.
Om du vill använda Redis-utdatacacheprovidern konfigurerar du först din cache och konfigurerar sedan ditt ASP.NET-program med Hjälp av NuGet-paketet Redis Output Cache Provider. Den här artikeln innehåller råd om hur du konfigurerar ditt program för att använda Redis-utdatacacheprovidern. Mer information om hur du skapar och konfigurerar en Azure Cache for Redis-instans finns i Skapa en cache.
Lagra ASP.NET sidutdata i cacheminnet
Om du vill konfigurera ett klientprogram i Visual Studio med hjälp Azure Cache for Redis NuGet-paketet Sessionstillstånd väljer du NuGet Package Manager, Package Manager Console på menyn Verktyg.
Kör följande kommando från fönstret Package Manager Console.
Install-Package Microsoft.Web.RedisOutputCacheProvider
NuGet-paketet för Redis-utdatacacheprovidern är beroende av StackExchange.Redis-paketet. Om StackExchange.Redis-paketet inte finns i projektet installeras det. Mer information om NuGet-paketet Redis Output Cache Provider finns på NuGet-sidan RedisOutputCacheProvider.
NuGet-paketet laddar ned och lägger till nödvändiga sammansättningsreferenser och lägger till följande avsnitt i din web.config fil. Det här avsnittet innehåller den konfiguration som krävs för ASP.NET att 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 till vänster med värden från cachen i Microsoft Azure portalen. Konfigurera även de andra värdena 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 | Description |
|---|---|---|---|
| Värd | sträng | "localhost" | Redis-serverns IP-adress eller värdnamn |
| Port | positivt heltal | 6379 (inte TLS/SSL) 6380 (TLS/SSL) |
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 Din Redis-server 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 | Falska | Om du ska 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 en Azure Cache for Redis, som stöder SSL som standard, måste du ställa in det här värdet på sant för att förbättra säkerheten. Porten som inte är TLS är inaktiverad som standard för nya cacheminnen. Ange true för den här inställningen om du vill använda porten som inte är TLS. 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 bara anges via antingen web.config eller AppSettings. Ange vilken Redis-databas som ska användas. |
| connectionTimeoutIn Milliseconds | positivt heltal | Tillhandahålls av StackExchange.Redis | Används för att ange ConnectTimeout när du skapar StackExchange.Redis.ConnectionMultiplexer. |
| operationTimeoutIn Milliseconds | positivt heltal | Tillhandahålls av StackExchange.Redis | Används för att ange SyncTimeout när du skapar StackExchange.Redis.ConnectionMultiplexer. |
| connectionString (giltig StackExchange.Redis-anslutningssträng) | sträng | inte är en | Antingen en parameterreferens till AppSettings eller web.config, eller en giltig StackExchange.Redis-anslutningssträng. Det här attributet kan ange värden för värd, port, accessKey, ssl och andra StackExchange.Redis-attribut. En närmare titt på connectionString finns i Ställa in connectionString i avsnittet Attributanteckningar. |
| settingsClassName settingsMethodName |
sträng sträng |
inte är en | Dessa attribut kan bara anges via antingen web.config eller AppSettings. Använd dessa attribut för att ange 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 void (acceptera inga parametrar) med en returtyp av strängen. Den här metoden returnerar den faktiska anslutningssträngen. |
| loggingClassName loggingMethodName |
sträng sträng |
inte är en | Dessa attribut kan bara anges via antingen 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 void (acceptera inga parametrar), med returtypen System.IO.TextWriter. |
| applicationName | sträng | Modulnamnet för den aktuella processen eller "/" | Endast SessionStateProvider Det här attributet kan bara anges via antingen web.config eller AppSettings. Det appnamnsprefix som ska användas i Redis Cache. Kunden kan använda samma Redis-cache i olika syften. För att säkerställa att sessionsnycklarna inte krockar kan det föregås av programnamnet. |
| throwOnError | boolean | true | Endast SessionStateProvider Det här attributet kan bara anges via antingen web.config eller AppSettings. Huruvida ett undantag ska utlöstas när ett fel inträffar. Mer information om throwOnError finns i Anteckningar om throwOnError i avsnittet Attributanteckningar. |
| retryTimeoutIn Milliseconds | positivt heltal | 5000 | Endast SessionStateProvider Det här attributet kan bara anges via antingen 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 operationTimeoutIn Milliseconds försöker inte providern igen. Mer information om retryTimeoutIn Milliseconds finns i Anteckningar om retryTimeoutIn Milliseconds i avsnittet Attributanteckningar. |
| redisSerializerType | sträng | ej a | Anger det sammansättningskvalificerade typnamnet för en klass som implementerar Microsoft.Web.Redis. Serialiseraren 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ängen från AppSettings, om en sådan sträng finns i AppSettings. Om det inte finns i AppSettings används värdet för connectionString som nyckel för att hämta den faktiska anslutningssträngen från web.config ConnectionString om det avsnittet finns. Om anslutningssträngen 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.
I följande exempel visas 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.config använder du nyckeln ovan som parametervärde i stället för det faktiska värdet.
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvide"
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.config använder du nyckeln ovan som parametervärde i stället för det faktiska värdet.
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvide"
name = "MySessionStateStore"
connectionString = "MyRedisConnectionString"/>
</providers>
</sessionState>
Exempel 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>
Kommentarer om throwOnError
Om ett fel inträffar under en sessionsåtgärd utlöste för närvarande sessionstillståndsprovidern ett undantag. Om undantaget utlösts stängs programmet av.
Det här beteendet har ändrats på ett sätt som stöder förväntningarna på befintliga ASP.NET användare av sessionstillståndsprovidern samtidigt som du kan agera på undantag. Standardbeteendet kastar fortfarande ett undantag när ett fel inträffar, i enlighet med andra ASP.NET sessionstillståndsproviders. Befintlig kod bör fungera på samma sätt som tidigare.
Om du anger throwOnError till false misslyckas den 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 undantaget kontrollerar du den statiska egenskapen Microsoft.Web.Redis.RedisSessionStateProvider.LastException.
Information om retryTimeoutIn Milliseconds
Inställningen retryTimeoutIn Milliseconds innehåller 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 retryTimeoutIn Milliseconds kan du också styra tidsgränsen för återförsök eller helt välja bort återförsök.
Om du ställer in retryTimeoutIn Milliseconds till ett tal, till exempel 2000, försöker en sessionsåtgärd 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 omförsök konfigurerar du bara tidsgränsen. Det första återförsöket sker efter 20 millisekunder, vilket är tillräckligt i de flesta fall när ett nätverksfel inträffar. Därefter försöker den igen varje sekund tills den får sin tids slut. Direkt efter tidsgränsen försöker den igen en gång till för att se till att tidsgränsen inte klipps ut med (högst) en sekund.
Om du inte tror att du behöver göra ett nytt försök eller om du vill hantera logiken för omförsök själv anger du retryTimeoutIn Milliseconds 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, som 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 hjälp av 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 definieras i en sammansättning med namnet MyCompanyDll kan du ange parametern redisSerializerType så att den används:
<sessionState mode="Custom" customProvider="MySessionStateStore">
<providers>
<add type = "Microsoft.Web.Redis.RedisSessionStateProvider"
name = "MySessionStateStore"
redisSerializerType = "MyCompany.Redis.JsonSerializer,MyCompanyDll"
... />
</providers>
</sessionState>
Direktiv för utdatacache
Lägg till ett OutputCache-direktiv på varje sida som du vill cachelagra 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 gjort de här stegen konfigureras programmet för att använda Redis-cacheprovidern för utdata.
Leverantörer av utdatacache från tredje part
Nästa steg
Kolla in providern ASP.NET sessionstillstånd för att Azure Cache for Redis.