Dostawca wyjściowej pamięci podręcznej ASP.NET dla usługi Azure cache for RedisASP.NET Output Cache Provider for Azure Cache for Redis

Dostawca wyjściowej pamięci podręcznej Redis jest mechanizmem magazynu poza procesem dla danych wyjściowej pamięci podręcznej.The Redis Output Cache Provider is an out-of-process storage mechanism for output cache data. Te dane są przeznaczone wyłącznie dla pełnych odpowiedzi HTTP (buforowanie danych wyjściowych strony).This data is specifically for full HTTP responses (page output caching). Dostawca podłącza się do nowego punktu rozszerzalności dostawcy pamięci podręcznej, który został wprowadzony w ASP.NET 4.The provider plugs into the new output cache provider extensibility point that was introduced in ASP.NET 4. W przypadku aplikacji ASP.NET Core Odczytaj buforowanie odpowiedzi w ASP.NET Core.For ASP.NET Core applications, read Response caching in ASP.NET Core.

Aby użyć dostawcy wyjściowej pamięci podręcznej Redis, najpierw Skonfiguruj pamięć podręczną, a następnie skonfiguruj aplikację ASP.NET przy użyciu pakietu NuGet wyjściowego dostawcy pamięci podręcznej Redis.To use the Redis Output Cache Provider, first configure your cache, and then configure your ASP.NET application using the Redis Output Cache Provider NuGet package. Ten temat zawiera wskazówki dotyczące konfigurowania aplikacji do korzystania z dostawcy wyjściowej pamięci podręcznej Redis.This topic provides guidance on configuring your application to use the Redis Output Cache Provider. Aby uzyskać więcej informacji na temat tworzenia i konfigurowania wystąpienia usługi Azure cache for Redis, zobacz Tworzenie pamięci podręcznej.For more information about creating and configuring an Azure Cache for Redis instance, see Create a cache.

Przechowuj dane wyjściowe strony ASP.NET w pamięci podręcznejStore ASP.NET page output in the cache

Aby skonfigurować aplikację kliencką w programie Visual Studio przy użyciu pakietu NuGet usługi Azure cache for Redis, kliknij pozycję Menedżer pakietów NuGet, konsola Menedżera pakietów z menu Narzędzia .To configure a client application in Visual Studio using the Azure Cache for Redis Session State NuGet package, click NuGet Package Manager, Package Manager Console from the Tools menu.

W oknie Package Manager Console uruchom następujące polecenie.Run the following command from the Package Manager Console window.

Install-Package Microsoft.Web.RedisOutputCacheProvider

Pakiet NuGet Redis wyjściowego dostawcy pamięci podręcznej ma zależność od pakietu StackExchange. Redis. StrongName.The Redis Output Cache Provider NuGet package has a dependency on the StackExchange.Redis.StrongName package. Jeśli pakiet StackExchange. Redis. StrongName nie występuje w projekcie, jest on zainstalowany.If the StackExchange.Redis.StrongName package is not present in your project, it is installed. Aby uzyskać więcej informacji na temat pakietu NuGet Redis wyjściowego dostawcy pamięci podręcznej, zobacz stronę NuGet RedisOutputCacheProvider .For more information about the Redis Output Cache Provider NuGet package, see the RedisOutputCacheProvider NuGet page.

Uwaga

Oprócz silnej nazwy pakietu StackExchange. Redis. StrongName istnieje również StackExchange. Redis, która nie ma silnej nazwy.In addition to the strong-named StackExchange.Redis.StrongName package, there is also the StackExchange.Redis non-strong-named version. Jeśli projekt używa niesilnej nazwy StackExchange. Redis, należy ją odinstalować. w przeciwnym razie w projekcie wystąpią konflikty nazw.If your project is using the non-strong-named StackExchange.Redis version you must uninstall it; otherwise, you will experience naming conflicts in your project. Aby uzyskać więcej informacji o tych pakietach, zobacz Konfigurowanie klientów pamięci podręcznej platformy .NET.For more information about these packages, see Configure .NET cache clients.

Pakiet NuGet pobiera i dodaje wymagane odwołania do zestawu i dodaje do pliku web.config następującą sekcję.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Ta sekcja zawiera konfigurację wymaganą przez aplikację ASP.NET do użycia dostawcy wyjściowej pamięci podręcznej Redis.This section contains the required configuration for your ASP.NET application to use the Redis Output Cache Provider.

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

Skonfiguruj atrybuty przy użyciu wartości z bloku pamięci podręcznej w Microsoft Azure Portal i skonfiguruj inne wartości zgodnie z potrzebami.Configure the attributes with the values from your cache blade in the Microsoft Azure portal, and configure the other values as desired. Aby uzyskać instrukcje dotyczące uzyskiwania dostępu do właściwości pamięci podręcznej, zobacz Konfigurowanie usługi Azure cache for Redis Settings.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

AtrybutAttribute TypType DomyślneDefault OpisDescription
Hosthost ciągstring lokalnym"localhost" Adres IP lub nazwa hosta serwera RedisThe Redis server IP address or host name
przewożącport dodatnia liczba całkowitapositive integer 6379 (bez protokołu TLS/SSL)6379 (non-TLS/SSL)
6380 (TLS/SSL)6380 (TLS/SSL)
Port serwera RedisRedis server port
accessKeyaccessKey ciągstring """" Hasło serwera Redis, gdy autoryzacja Redis jest włączona.Redis server password when Redis authorization is enabled. Wartość jest domyślnie pustym ciągiem, co oznacza, że dostawca stanu sesji nie będzie używać żadnego hasła podczas nawiązywania połączenia z serwerem Redis.The value is empty string by default, which means the session state provider won’t use any password when connecting to Redis server. Jeśli Twój serwer Redis znajduje się w publicznie dostępnej sieci, takiej jak Azure Redis Cache, upewnij się, że włączono autoryzację Redis, aby zwiększyć bezpieczeństwo i zapewnić bezpieczne hasło.If your Redis server is in a publicly accessible network like Azure Redis Cache, be sure to enable Redis authorization to improve security, and provide a secure password.
zastosowaniassl booleanboolean falsefalse Czy nawiązać połączenie z serwerem Redis za pośrednictwem protokołu TLS.Whether to connect to Redis server via TLS. Ta wartość jest domyślnie fałszywa , ponieważ Redis nie obsługuje protokołu TLS z pola.This value is false by default because Redis doesn’t support TLS out of the box. Jeśli używasz Azure Redis Cache, który obsługuje protokół SSL z pola, pamiętaj, aby ustawić wartość true, aby zwiększyć bezpieczeństwo.If you are using Azure Redis Cache which supports SSL out of the box, be sure to set this to true to improve security.

Port inny niż TLS jest domyślnie wyłączony w przypadku nowych pamięci podręcznych.The non-TLS port is disabled by default for new caches. Określ wartość true dla tego ustawienia, aby używać portu niezwiązanego z protokołem TLS.Specify true for this setting to use the non-TLS port. Aby uzyskać więcej informacji na temat włączania portu bez protokołu TLS, zobacz sekcję porty dostępu w temacie Konfigurowanie pamięci podręcznej .For more information about enabling the non-TLS port, see the Access Ports section in the Configure a cache topic.
databaseIdNumberdatabaseIdNumber dodatnia liczba całkowitapositive integer 00 Ten atrybut może być określony tylko za pomocą web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Określ, która baza danych Redis ma być używana.Specify which Redis database to use.
connectionTimeoutInMillisecondsconnectionTimeoutInMilliseconds dodatnia liczba całkowitapositive integer Dostarczone przez StackExchange. RedisProvided by StackExchange.Redis Służy do ustawiania ConnectTimeout podczas tworzenia stackexchange. Redis. ConnectionMultiplexer.Used to set ConnectTimeout when creating StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMillisecondsoperationTimeoutInMilliseconds dodatnia liczba całkowitapositive integer Dostarczone przez StackExchange. RedisProvided by StackExchange.Redis Służy do ustawiania SyncTimeout podczas tworzenia stackexchange. Redis. ConnectionMultiplexer.Used to set SyncTimeout when creating StackExchange.Redis.ConnectionMultiplexer.
ConnectionString (prawidłowe parametry połączenia stackexchange. Redis)connectionString (Valid StackExchange.Redis connection string) ciągstring nie dotyczyn/a Odwołanie do parametru AppSettings lub web.config lub nieprawidłowe parametry połączenia StackExchange. Redis.Either a parameter reference to AppSettings or web.config, or else a valid StackExchange.Redis connection string. Ten atrybut może podawać wartości parametrów host, port, AccessKey, SSL i inne atrybuty stackexchange. Redis.This attribute can provide values for host, port, accessKey, ssl, and other StackExchange.Redis attributes. Aby bliżej zapoznać się z parametrem ConnectionString, zobacz ustawienie ConnectionString w sekcji uwagi dotyczące atrybutu .For a closer look at connectionString, see Setting connectionString in the Attribute notes section.
settingsClassNamesettingsClassName
settingsMethodNamesettingsMethodName
ciągstring
ciągstring
nie dotyczyn/a Te atrybuty można określić tylko za pomocą web.config lub AppSettings.These attributes can be specified only through either web.config or AppSettings.

Użyj tych atrybutów, aby podać parametry połączenia.Use these attributes to provide a connection string. settingsClassName powinna być kwalifikowana nazwa klasy zestawu, która zawiera metodę określoną przez settingsMethodName.settingsClassName should be an assembly qualified class name that contains the method specified by settingsMethodName.

Metoda określona przez settingsMethodName powinna być publiczna, statyczna i void (nie przyjmować żadnych parametrów) z typem zwracanym ciągu.The method specified by settingsMethodName should be public, static, and void (not take any parameters), with a return type of string. Ta metoda zwraca rzeczywiste parametry połączenia.This method returns the actual connection string.
loggingClassNameloggingClassName
loggingMethodNameloggingMethodName
ciągstring
ciągstring
nie dotyczyn/a Te atrybuty można określić tylko za pomocą web.config lub AppSettings.These attributes can be specified only through either web.config or AppSettings.

Te atrybuty umożliwiają debugowanie aplikacji przez dostarczanie dzienników z pamięci podręcznej stanu sesji/wyjściowej oraz dzienników z StackExchange. Redis.Use these attributes to debug your application by providing logs from Session State/Output Cache along with logs from StackExchange.Redis. loggingClassName powinna być kwalifikowana nazwa klasy zestawu, która zawiera metodę określoną przez loggingMethodName.loggingClassName should be an assembly qualified class name that contains the method specified by loggingMethodName.

Metoda określona przez loggingMethodName powinna być publiczna, statyczna i void (nie przyjmować żadnych parametrów) z typem zwracanym System. IO. TextWriter.The method specified by loggingMethodName should be public, static, and void (not take any parameters), with a return type of System.IO.TextWriter.
applicationNameapplicationName ciągstring Nazwa modułu bieżącego procesu lub "/"The module name of the current process or "/" Tylko SessionStateProviderSessionStateProvider only
Ten atrybut może być określony tylko za pomocą web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Prefiks nazwy aplikacji do użycia w pamięci podręcznej Redis.The app name prefix to use in Redis cache. Klient może używać tej samej pamięci podręcznej Redis do różnych celów.The customer may use the same Redis cache for different purposes. Aby upewnić się, że klucze sesji nie kolidują, można je prefiksować przy użyciu nazwy aplikacji.To insure that the session keys do not collide, it can be prefixed with the application name.
Parametr throwOnErrorthrowOnError booleanboolean truetrue Tylko SessionStateProviderSessionStateProvider only
Ten atrybut może być określony tylko za pomocą web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Określa, czy zgłaszać wyjątek w przypadku wystąpienia błędu.Whether to throw an exception when an error occurs.

Aby uzyskać więcej informacji na temat parametr throwOnError, zobacz uwagi dotyczące parametr throwOnError w sekcji uwagi dotyczące atrybutów .For more about throwOnError, see Notes on throwOnError in the Attribute notes section.
>Microsoft. Web. Redis. pakietu redissessionstateprovider. LastException.>Microsoft.Web.Redis.RedisSessionStateProvider.LastException.
retryTimeoutInMillisecondsretryTimeoutInMilliseconds dodatnia liczba całkowitapositive integer 50005000 Tylko SessionStateProviderSessionStateProvider only
Ten atrybut może być określony tylko za pomocą web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Czas ponowienia próby w przypadku niepowodzenia operacji.How long to retry when an operation fails. Jeśli ta wartość jest mniejsza niż operationTimeoutInMilliseconds, dostawca nie będzie ponawiać próby.If this value is less than operationTimeoutInMilliseconds, the provider will not retry.

Aby uzyskać więcej informacji na temat retryTimeoutInMilliseconds, zobacz uwagi dotyczące retryTimeoutInMilliseconds w sekcji uwagi dotyczące atrybutów .For more about retryTimeoutInMilliseconds, see Notes on retryTimeoutInMilliseconds in the Attribute notes section.
redisSerializerTyperedisSerializerType ciągstring nie dotyczyn/a Określa nazwę typu kwalifikowanego zestawu klasy implementującej Microsoft. Web. Redis.Specifies the assembly qualified type name of a class that implements Microsoft.Web.Redis. ISerializer i zawierający logikę niestandardową do serializacji i deserializacji wartości.ISerializer and that contains the custom logic to serialize and deserialize the values. Aby uzyskać więcej informacji, zobacz Informacje o redisSerializerType w sekcji uwagi dotyczące atrybutów .For more information, see About redisSerializerType in the Attribute notes section.

Uwagi dotyczące atrybutówAttribute notes

Ustawianie ConnectionStringSetting connectionString

Wartość parametru ConnectionString jest używana jako klucz do pobierania rzeczywistych parametrów połączenia z AppSettings, jeśli taki ciąg istnieje w appSettings.The value of connectionString is used as key to fetch the actual connection string from AppSettings, if such a string exists in AppSettings. Jeśli nie znaleziono wewnątrz AppSettings, wartość ConnectionString zostanie użyta jako klucz do pobrania rzeczywistych parametrów połączenia z sekcji web.config ConnectionString (Jeśli ta sekcja istnieje).If not found inside AppSettings, the value of connectionString will be used as key to fetch actual connection string from the web.config ConnectionString section, if that section exists. Jeśli parametry połączenia nie istnieją w sekcji AppSettings lub web.config ConnectionString , wartość literału ConnectionString zostanie użyta jako parametry połączenia podczas tworzenia stackexchange. Redis. ConnectionMultiplexer.If the connection string does not exists in AppSettings or the web.config ConnectionString section, the literal value of connectionString will be used as the connection string when creating StackExchange.Redis.ConnectionMultiplexer.

W poniższych przykładach pokazano, jak używać ConnectionString .The following examples illustrate how connectionString is used.

Przykład 1Example 1

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

W web.config , użyj powyżej klucza jako wartości parametru zamiast wartości rzeczywistej.In web.config, use above key as parameter value instead of actual value.

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

Przykład 2Example 2

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

W web.config , użyj powyżej klucza jako wartości parametru zamiast wartości rzeczywistej.In web.config, use above key as parameter value instead of actual value.

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

Przykład 3Example 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>

Uwagi dotyczące parametr throwOnErrorNotes on throwOnError

Obecnie w przypadku wystąpienia błędu podczas operacji sesji dostawca stanu sesji zgłosi wyjątek.Currently, if an error occurs during a session operation, the session state provider will throw an exception. Spowoduje to zamknięcie aplikacji.This shuts down the application.

To zachowanie zostało zmodyfikowane w sposób, który obsługuje oczekiwania istniejących użytkowników dostawcy stanu sesji ASP.NET, a także zapewnia możliwość działania na wyjątkach, w razie potrzeby.This behavior has been modified in a way that supports the expectations of existing ASP.NET session state provider users while also providing the ability to act on exceptions, if desired. Zachowanie domyślne nadal zgłasza wyjątek w przypadku wystąpienia błędu spójnego z innymi dostawcami stanu sesji ASP.NET. istniejący kod powinien działać tak samo jak poprzednio.The default behavior still throws an exception when an error occurs, consistent with other ASP.NET session state providers; existing code should work the same as before.

Jeśli ustawisz parametr throwOnError na false, zamiast zgłaszać wyjątek w przypadku wystąpienia błędu, będzie on działać w trybie dyskretnym.If you set throwOnError to false, then instead of throwing an exception when an error occurs, it will fail silently. Aby sprawdzić, czy wystąpił błąd i, jeśli tak, sprawdzić, jaki był wyjątek, sprawdź Właściwość statyczną Microsoft. Web. Redis. pakietu redissessionstateprovider. LastException.To see if there was an error and, if so, discover what the exception was, check the static property Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Uwagi dotyczące retryTimeoutInMillisecondsNotes on retryTimeoutInMilliseconds

Zapewnia to kilka logiki ponawiania, aby uprościć przypadek, w którym niektóre operacje na sesji powinny być ponawiane z powodu błędu sieci, a jednocześnie pozwala kontrolować limit czasu ponawiania prób lub zrezygnować całkowicie z ponowień.This provides some retry logic to simplify the case where some session operation should retry on failure because of things like network glitch, while also allowing you to control the retry timeout or opt out of retry entirely.

Jeśli ustawisz retryTimeoutInMilliseconds na liczbę, na przykład 2000, wtedy, gdy operacja sesji nie powiedzie się, zostanie ponowiona próba dla 2000 milisekund przed potraktowaniem jej jako błędu.If you set retryTimeoutInMilliseconds to a number, for example 2000, then when a session operation fails, it will retry for 2000 milliseconds before treating it as an error. Aby Dostawca stanu sesji stosował tę logikę ponowień, po prostu Skonfiguruj limit czasu.So to have the session state provider to apply this retry logic, just configure the timeout. Pierwsza ponowna próba nastąpi po 20 milisekundach, co jest wystarczające w większości przypadków, gdy wystąpi błąd sieci.The first retry will happen after 20 milliseconds, which is sufficient in most cases when a network glitch happens. Następnie będzie ponawiać próbę co sekundę do czasu przełączenia. Po upływie limitu czasu program ponowi próbę jeszcze raz, aby upewnić się, że nie wytnie limitu czasu przez (maksymalnie) 1 sekundy.After that, it will retry every second until it times out. Right after the time out, it will retry one more time to make sure that it won’t cut off the timeout by (at most) one second.

Jeśli nie sądzisz, że potrzebujesz ponowienia próby (na przykład w przypadku uruchamiania serwera Redis na tym samym komputerze, na którym znajduje się aplikacja), lub jeśli chcesz samodzielnie obsłużyć logikę ponowień, ustaw wartość retryTimeoutInMilliseconds na 0.If you don’t think you need retry (for example, when you are running the Redis server on the same machine as your application) or if you want to handle the retry logic yourself, set retryTimeoutInMilliseconds to 0.

Informacje o redisSerializerTypeAbout redisSerializerType

Domyślnie Serializacja do przechowywania wartości w Redis jest wykonywana w formacie binarnym dostarczonym przez klasę BinaryFormatter .By default, the serialization to store the values on Redis is done in a binary format provided by the BinaryFormatter class. Użyj redisSerializerType , aby określić nazwę typu kwalifikowanego zestawu klasy implementującej Microsoft. Web. Redis. ISerializer i która ma logikę niestandardową do serializacji i deserializacji wartości.Use redisSerializerType to specify the assembly qualified type name of a class that implements Microsoft.Web.Redis.ISerializer and has the custom logic to serialize and deserialize the values. Na przykład poniżej przedstawiono klasę serializatorów JSON używającą JSON.NET:For example, here is a Json serializer class using 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);
        }
    }
}

Zakładając, że ta klasa jest zdefiniowana w zestawie o nazwie MyCompanyDll, można ustawić parametr redisSerializerType , aby go użyć:Assuming this class is defined in an assembly with name MyCompanyDll, you can set the parameter redisSerializerType to use it:

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

Dyrektywa wyjściowej pamięci podręcznejOutput cache directive

Dodaj dyrektywę OutputCache do każdej strony, dla której chcesz buforować dane wyjściowe.Add an OutputCache directive to each page for which you wish to cache the output.

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

W poprzednim przykładzie dane buforowanej strony pozostają w pamięci podręcznej przez 60 sekund, a inna wersja strony jest buforowana dla każdej kombinacji parametrów.In the previous example, the cached page data remains in the cache for 60 seconds, and a different version of the page is cached for each parameter combination. Więcej informacji o dyrektywie OutputCache można znaleźć w temacie @OutputCache .For more information about the OutputCache directive, see @OutputCache.

Po wykonaniu tych kroków aplikacja zostanie skonfigurowana do korzystania z dostawcy wyjściowej pamięci podręcznej Redis.Once these steps are performed, your application is configured to use the Redis Output Cache Provider.

Dostawcy wyjściowej pamięci podręcznej innych firmThird-party output cache providers

Następne krokiNext steps

Zapoznaj się z dostawcą stanu sesji ASP.NET dla usługi Azure cache for Redis.Check out the ASP.NET Session State Provider for Azure Cache for Redis.