dostawca pamięci podręcznej ASP.NET dla pamięci podręcznej Azure dla redisASP.NET Output Cache Provider for Azure Cache for Redis

Dostawca pamięci podręcznej wyjścia Redis jest mechanizmem magazynu poza procesem dla danych pamięci podręcznej wyjściowej.The Redis Output Cache Provider is an out-of-process storage mechanism for output cache data. Te dane są przeznaczone specjalnie 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 wyjściowej, 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.

Aby użyć dostawcy pamięci podręcznej wyjścia Redis, najpierw skonfiguruj pamięć podręczną, a następnie skonfiguruj aplikację ASP.NET przy użyciu pakietu NuGet dostawcy pamięci podręcznej Wyjścia 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. W tym temacie przedstawiono wskazówki dotyczące konfigurowania aplikacji do używania dostawcy pamięci podręcznej wyjścia 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 pamięci podręcznej platformy Azure dla wystąpienia Redis, zobacz Tworzenie pamięci podręcznej.For more information about creating and configuring an Azure Cache for Redis instance, see Create a cache.

Przechowywanie ASP.NET danych wyjściowych strony 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 stanu sesji usługi Azure dla programu Redis Session, kliknij polecenie 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 dostawcy pamięci podręcznej wyjścia Redis 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 jest obecny w projekcie, jest zainstalowany.If the StackExchange.Redis.StrongName package is not present in your project, it is installed. Aby uzyskać więcej informacji na temat dostawcy pamięci podręcznej Wyjścia Redis NuGet pakietu, zobacz RedisOutputCacheProvider NuGet strony.For more information about the Redis Output Cache Provider NuGet package, see the RedisOutputCacheProvider NuGet page.

Uwaga

Oprócz pakietu StackExchange.StrongName o silnej nazwie istnieje również wersja StackExchange.Redis o niesilniej nazwanych.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 wersji StackExchange.Redis o nieprzysmocnej nazwie, należy ją odinstalować; w przeciwnym razie wystąpią konflikty nazewnictwa w projekcie.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 na temat tych pakietów, zobacz Konfigurowanie klientów pamięci podręcznej .NET.For more information about these packages, see Configure .NET cache clients.

Pakiet NuGet pobiera i dodaje wymagane odwołania do zestawu i dodaje następującą sekcję do pliku web.config.The NuGet package downloads and adds the required assembly references and adds the following section into your web.config file. Ta sekcja zawiera wymaganą konfigurację dla aplikacji ASP.NET do korzystania z dostawcy pamięci podręcznej wyjścia 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 z wartościami z bloku pamięci podręcznej w witrynie 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 pamięci podręcznej azure dla ustawień Redis.For instructions on accessing your cache properties, see Configure Azure Cache for Redis settings.

AtrybutAttribute TypType DomyślneDefault OpisDescription
Hostahost ciągstring "Localhost""localhost" Adres IP serwera Redis lub nazwa hostaThe Redis server IP address or host name
Portuport dodatnia wartość całkowitapositive integer 6379 (bez SSL)6379 (non-SSL)
6380 (SSL)6380 (SSL)
Port serwera RedisRedis server port
AccesskeyaccessKey ciągstring """" Hasło serwera Redis po włączeniu autoryzacji Redis.Redis server password when Redis authorization is enabled. Wartość jest domyślnie pusty ciąg, co oznacza, że dostawca stanu sesji nie będzie używać hasła podczas łączenia się 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 serwer Redis znajduje się w publicznie dostępnej sieci, takiej jak Pamięć podręczna Usługi Azure Redis, należy włączyć autoryzację Redis, aby zwiększyć bezpieczeństwo i podać 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.
Sslssl wartość logicznaboolean Falsefalse Czy połączyć się z serwerem Redis za pośrednictwem protokołu SSL.Whether to connect to Redis server via SSL. Ta wartość jest false domyślnie, ponieważ Redis nie obsługuje SSL po wyjęciu z pudełka.This value is false by default because Redis doesn’t support SSL out of the box. Jeśli używasz usługi Azure Redis Cache, która obsługuje ssl po wyjęciu z pudełka, należy ustawić to na 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 bez obsługi protokołu SSL jest domyślnie wyłączony w przypadku nowych pamięci podręcznych.The non-SSL port is disabled by default for new caches. Określ wartość true dla tego ustawienia, aby użyć portu SSL.Specify true for this setting to use the SSL port. Aby uzyskać więcej informacji na temat włączania portu nienawiązanego do SSL, zobacz sekcję Porty dostępu w temacie Konfigurowanie pamięci podręcznej.For more information about enabling the non-SSL port, see the Access Ports section in the Configure a cache topic.
numer danychIdNumberdatabaseIdNumber dodatnia wartość całkowitapositive integer 00 Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Określ, której bazy danych Redis użyć.Specify which Redis database to use.
connectionTimeoutInMillisecondsconnectionTimeoutInMilliseconds dodatnia wartość 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.
operacjaTimeoutInMillisecondsoperationTimeoutInMilliseconds dodatnia wartość 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łowy ciąg połączenia StackExchange.Redis)connectionString (Valid StackExchange.Redis connection string) ciągstring N/an/a Odwołanie do parametru AppSettings lub web.config, albo prawidłowy ciąg 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 dostarczyć wartości dla hosta, portu, accessKey, ssli innych atrybutów StackExchange.Redis.This attribute can provide values for host, port, accessKey, ssl, and other StackExchange.Redis attributes. Aby uzyskać bliższe spojrzenie na connectionString, zobacz Ustawianie connectionString w sekcji Notatki atrybutu.For a closer look at connectionString, see Setting connectionString in the Attribute notes section.
ustawieniaClassNamesettingsClassName
ustawieniaNamesettingsMethodName
ciągstring
ciągstring
N/an/a Te atrybuty można określić tylko za pośrednictwem web.config lub AppSettings.These attributes can be specified only through either web.config or AppSettings.

Użyj tych atrybutów, aby zapewnić parametry połączenia.Use these attributes to provide a connection string. settingsClassName powinna być nazwą klasy kwalifikowanej 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 ustawieniaMethodName powinna być publiczna, statyczna i void (nie przyjmuje ż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 rzeczywisty ciąg połączenia.This method returns the actual connection string.
rejestrowanieClassNameloggingClassName
logowanieNameloggingMethodName
ciągstring
ciągstring
N/an/a Te atrybuty można określić tylko za pośrednictwem web.config lub AppSettings.These attributes can be specified only through either web.config or AppSettings.

Użyj tych atrybutów do debugowania aplikacji, udostępniając dzienniki ze stanu sesji/pamięci podręcznej wyjściowej wraz z dziennikami 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 powinien być nazwą klasy kwalifikowanej zestawu, która zawiera metodę określoną przez logowanieMethodName.loggingClassName should be an assembly qualified class name that contains the method specified by loggingMethodName.

Metoda określona przez logowanieMethodName powinny być publiczne, statyczne i nieważne (nie należy przyjmować żadnych parametrów), z typem zwrotnym 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żna określić tylko za pośrednictwem 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 zapewnić, że klucze sesji nie zderzają się, może być poprzedzony nazwą aplikacji.To insure that the session keys do not collide, it can be prefixed with the application name.
ThrowonerrorthrowOnError wartość logicznaboolean truetrue Tylko sessionStateProviderSessionStateProvider only
Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Czy zgłosić wyjątek, gdy wystąpi błąd.Whether to throw an exception when an error occurs.

Aby uzyskać więcej informacji na temat throwOnError, zobacz uwagi na throwOnError w informacji o atrybucie notatek sekcji.For more about throwOnError, see Notes on throwOnError in the Attribute notes section.
>Microsoft.web.redis.redissessionStateProvider.LastException.>Microsoft.Web.Redis.RedisSessionStateProvider.LastException.
ponów czasomierzewpołoweretryTimeoutInMilliseconds dodatnia wartość całkowitapositive integer 50005000 Tylko sessionStateProviderSessionStateProvider only
Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.This attribute can be specified only through either web.config or AppSettings.

Jak długo ponowić próbę, gdy operacja nie powiedzie się.How long to retry when an operation fails. Jeśli ta wartość jest mniejsza niż operationTimeoutInMilliseconds, dostawca nie ponowi próby.If this value is less than operationTimeoutInMilliseconds, the provider will not retry.

Aby uzyskać więcej informacji na temat ponawianiaTimeoutInMilliseconds, zobacz uwagi dotyczące ponawianiaTimeoutInMilliseconds w sekcji Notatki atrybutu.For more about retryTimeoutInMilliseconds, see Notes on retryTimeoutInMilliseconds in the Attribute notes section.
redisSerializerTyperedisSerializerType ciągstring N/an/a Określa nazwę typu kwalifikowanego zestawu klasy implementujejs.Specifies the assembly qualified type name of a class that implements Microsoft.Web.Redis. ISerializer i zawiera niestandardową logikę 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 Temat redisSerializerType w sekcji Notatki atrybutu.For more information, see About redisSerializerType in the Attribute notes section.

Uwagi dotyczące atrybutówAttribute notes

Ustawianie połączeniaStringSetting connectionString

Wartość connectionString jest używany jako klucz do pobierania rzeczywistego ciągu 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 będzie używany jako klucz do pobierania rzeczywistego ciągu połączenia z web.config ConnectionString sekcji, 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 istnieje w AppSettings lub web.config ConnectionString sekcji, dosłowna wartość connectionString będzie używany jako ciąg 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.

Poniższe przykłady ilustrują sposób connectionString jest używany.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.configpolu użyj powyższego 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.configpolu użyj powyższego 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 throwOnErrorNotes on throwOnError

Obecnie jeśli wystąpi błąd 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 wyłączenie 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 ASP.NET sesji, zapewniając jednocześnie możliwość działania na wyjątki, 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. Domyślne zachowanie nadal zgłasza wyjątek, gdy wystąpi błąd, zgodne z innymi dostawcami stanu ASP.NET sesji; 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 throwOnError na false, a następnie zamiast zgłaszania wyjątku, gdy wystąpi błąd, zakończy się niepowodzeniem dyskretnie.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, a jeśli tak, dowiedzieć się, jaki był wyjątek, sprawdź właściwość statyczną Microsoft.Web.Redis.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 ponawianiatimeoutInMillisecondsNotes on retryTimeoutInMilliseconds

Zapewnia to pewną logikę ponawiania, aby uprościć przypadek, w którym niektóre operacje sesji należy ponowić próbę awarii z powodu takich rzeczy jak usterka sieci, a także pozwala kontrolować limit czasu ponawiania lub zrezygnować z ponownych prób całkowicie.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, a następnie, gdy operacja sesji nie powiedzie się, ponowi próbę na 2000 milisekund przed potraktowaniem go jako błąd.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 mieć dostawcę stanu sesji, aby zastosować tę logikę ponawiania, po prostu skonfiguruj limit czasu.So to have the session state provider to apply this retry logic, just configure the timeout. Pierwsza ponowna próby nastąpi po 20 milisekundach, co jest wystarczające w większości przypadków, gdy wystąpi usterka sieci.The first retry will happen after 20 milliseconds, which is sufficient in most cases when a network glitch happens. Następnie ponowi próbę co sekundę, aż do upływu czasu. Zaraz po upływie limitu czasu ponowi próbę jeszcze raz, aby upewnić się, że nie odetnie limitu czasu o (co najwyżej) jedną sekundę.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 uważasz, że nie trzeba ponowić próbę (na przykład podczas uruchamiania serwera Redis na tym samym komputerze co aplikacja) lub jeśli chcesz obsługiwać logikę ponawiania samodzielnie, ustaw retryTimeoutInMilliseconds do 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 serializacji do przechowywania wartości na Redis odbywa się w formacie binarnym dostarczonych przez BinaryFormatter klasy.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ę kwalifikowanego typu zestawu klasy, która implementuje microsoft.Web.Redis.ISerializer i ma niestandardową logikę 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 oto klasa serializatora Json przy użyciu 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 go używać: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 o pamięci podręcznej danych wyjściowychOutput cache directive

Dodaj dyrektywy 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 buforowane dane strony pozostaje 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. Aby uzyskać więcej informacji na temat @OutputCachedyrektywy OutputCache, zobacz .For more information about the OutputCache directive, see @OutputCache.

Po wykonaniu tych kroków aplikacja jest skonfigurowana do używania dostawcy pamięci podręcznej wyjścia Redis.Once these steps are performed, your application is configured to use the Redis Output Cache Provider.

Zewnętrzni dostawcy pamięci podręcznej danych wyjściowychThird-party output cache providers

Następne krokiNext steps

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