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

Dostawca wyjściowej pamięci podręcznej Redis to mechanizm magazynu poza procesem dla danych wyjściowych pamięci podręcznej. Te dane są przeznaczone specjalnie dla pełnych odpowiedzi HTTP (buforowanie danych wyjściowych strony). Dostawca podłącza nowy wyjściowy punkt rozszerzalności dostawcy pamięci podręcznej, który został wprowadzony w ASP.NET 4. W przypadku aplikacji ASP.NET Core przeczytaj buforowanie odpowiedzi w ASP.NET Core.

Aby użyć dostawcy usługi Redis Output Cache, najpierw skonfiguruj pamięć podręczną, a następnie skonfiguruj aplikację ASP.NET przy użyciu pakietu NuGet dostawcy usługi Redis Output Cache. Ten artykuł zawiera wskazówki dotyczące konfigurowania aplikacji w celu korzystania z dostawcy wyjściowej pamięci podręcznej Redis. Aby uzyskać więcej informacji na temat tworzenia i konfigurowania wystąpienia Azure Cache for Redis, zobacz Tworzenie pamięci podręcznej.

Przechowywanie danych wyjściowych strony ASP.NET w pamięci podręcznej

Aby skonfigurować aplikację kliencką w programie Visual Studio przy użyciu pakietu NuGet stanu sesji Azure Cache for Redis, wybierz pozycję Menedżer pakietów NuGet, Konsola menedżera pakietów w menu Narzędzia.

W oknie Package Manager Console uruchom następujące polecenie.

Install-Package Microsoft.Web.RedisOutputCacheProvider

Pakiet NuGet dostawcy pamięci podręcznej danych wyjściowych redis ma zależność od pakietu StackExchange.Redis. Jeśli pakiet StackExchange.Redis nie jest obecny w projekcie, jest zainstalowany. Aby uzyskać więcej informacji na temat pakietu NuGet dostawcy pamięci podręcznej Redis Output Cache, zobacz stronę NuGet RedisOutputCacheProvider .

Pakiet NuGet pobiera i dodaje wymagane odwołania do zestawu oraz dodaje następującą sekcję do pliku web.config. Ta sekcja zawiera wymaganą konfigurację aplikacji ASP.NET do korzystania z dostawcy pamięci podręcznej danych wyjściowych redis.

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

Skonfiguruj atrybuty po lewej stronie przy użyciu wartości z pamięci podręcznej w Azure Portal firmy Microsoft. Ponadto skonfiguruj inne żądane wartości. Aby uzyskać instrukcje dotyczące uzyskiwania dostępu do właściwości pamięci podręcznej, zobacz Konfigurowanie ustawień Azure Cache for Redis.

Atrybut Typ Domyślny Opis
Hosta ciąg "localhost" Adres IP serwera Redis lub nazwa hosta
Portu dodatnia liczba całkowita 6379 (bez protokołu TLS/SSL)
6380 (TLS/SSL)
Port serwera Redis
Accesskey ciąg "" Hasło serwera Redis po włączeniu autoryzacji usługi Redis. 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. Jeśli serwer Redis znajduje się w sieci dostępnej publicznie, takiej jak Azure Cache for Redis, pamiętaj o włączeniu autoryzacji usługi Redis w celu zwiększenia bezpieczeństwa i zapewnienia bezpiecznego hasła.
Ssl boolean False Czy nawiązać połączenie z serwerem Redis za pośrednictwem protokołu TLS. Ta wartość jest domyślnie fałszywa , ponieważ usługa Redis domyślnie nie obsługuje protokołu TLS. Jeśli używasz Azure Cache for Redis, która domyślnie obsługuje protokół SSL, ustaw tę wartość na true, aby zwiększyć bezpieczeństwo.

Port inny niż TLS jest domyślnie wyłączony dla nowych pamięci podręcznych. Określ wartość true dla tego ustawienia, aby używać portu innego niż TLS. Aby uzyskać więcej informacji na temat włączania portu innego niż TLS, zobacz sekcję Porty dostępu w artykule Konfigurowanie pamięci podręcznej .
databaseIdNumber dodatnia liczba całkowita 0 Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.

Określ bazę danych Redis do użycia.
connectionTimeoutInMilliseconds dodatnia liczba całkowita Dostarczone przez StackExchange.Redis Służy do ustawiania parametru ConnectTimeout podczas tworzenia elementu StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds dodatnia liczba całkowita Dostarczone przez StackExchange.Redis Służy do ustawiania parametru SyncTimeout podczas tworzenia elementu StackExchange.Redis.ConnectionMultiplexer.
connectionString (Prawidłowe parametry połączenia StackExchange.Redis) ciąg N/a Odwołanie do parametru AppSettings lub web.config albo prawidłowe parametry połączenia StackExchange.Redis. Ten atrybut może dostarczać wartości dla atrybutów hostów, portów, accessKey, ssl i innych atrybutów StackExchange.Redis. Aby zapoznać się bliżej z tematem connectionString, zobacz Ustawianie parametrów connectionString w sekcji Notatek atrybutu.
settingsClassName
settingsMethodName
ciąg
ciąg
N/a Te atrybuty można określić tylko za pomocą web.config lub AppSettings.

Użyj tych atrybutów, aby podać parametry połączenia. settingsClassName powinna być kwalifikowaną nazwą klasy zestawu, która zawiera metodę określoną przez ustawieniaMethodName.

Metoda określona przez ustawieniaMethodName powinna być publiczna, statyczna i unieważniona (akceptowana bez parametrów) z zwracanym typem ciągu. Ta metoda zwraca rzeczywiste parametry połączenia.
loggingClassName
loggingMethodName
ciąg
ciąg
N/a Te atrybuty można określić tylko za pomocą web.config lub AppSettings.

Użyj tych atrybutów, aby debugować aplikację, udostępniając dzienniki z pamięci podręcznej stanu sesji/wyjściowej wraz z dziennikami z witryny StackExchange.Redis. loggingClassName powinna być kwalifikowaną nazwą klasy zestawu, która zawiera metodę określoną przez loggingMethodName.

Metoda określona przez loggingMethodName powinna być publiczna, statyczna i unieważniona (nie akceptuje parametrów) z zwracanym typem System.IO.TextWriter.
Applicationname ciąg Nazwa modułu bieżącego procesu lub "/" SessionStateProvider tylko
Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.

Prefiks nazwy aplikacji do użycia w pamięci podręcznej Redis. Klient może używać tej samej pamięci podręcznej Redis w różnych celach. Aby zapewnić, że klucze sesji nie są kolidujące, można go prefiksować z nazwą aplikacji.
Throwonerror boolean true SessionStateProvider tylko
Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.

Czy zgłosić wyjątek w przypadku wystąpienia błędu.

Aby uzyskać więcej informacji na temat funkcji throwOnError, zobacz Uwagi dotyczące funkcji throwOnError w sekcji Uwagi dotyczące atrybutów .
retryTimeoutInMilliseconds dodatnia liczba całkowita 5000 SessionStateProvider tylko
Ten atrybut można określić tylko za pośrednictwem web.config lub AppSettings.

Jak długo należy ponowić próbę, gdy operacja zakończy się niepowodzeniem. Jeśli ta wartość jest mniejsza niż operationTimeoutInMilliseconds, dostawca nie ponowi próby.

Aby uzyskać więcej informacji na temat retryTimeoutInMilliseconds, zobacz Uwagi dotyczące retryTimeoutInMilliseconds w sekcji Notatek atrybutu .
redisSerializerType ciąg N/a Określa kwalifikowaną nazwę typu zestawu klasy, która implementuje usługę Microsoft.Web.Redis. Serializator i zawiera niestandardową logikę serializacji i deserializacji wartości. Aby uzyskać więcej informacji, zobacz About redisSerializerType (Informacje o typie redisSerializerType ) w sekcji Uwagi o atrybutach .

Uwagi dotyczące atrybutów

Ustawianie parametru connectionString

Wartość connectionString jest używana jako klucz do pobierania rzeczywistych parametrów połączenia z usługi AppSettings, jeśli takie parametry istnieją w usłudze AppSettings. Jeśli nie znaleziono elementu AppSettings, wartość connectionString będzie używana jako klucz do pobrania rzeczywistych parametrów połączenia z sekcji web.config ConnectionString , jeśli ta sekcja istnieje. Jeśli parametry połączenia nie istnieją w sekcji AppSettings lub web.config ConnectionString , wartość literału connectionString będzie używana jako parametry połączenia podczas tworzenia stackExchange.Redis.ConnectionMultiplexer.

W poniższych przykładach przedstawiono sposób użycia funkcji connectionString .

Przykład 1

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

W web.configpliku użyj powyższego klucza jako wartości parametru zamiast wartości rzeczywistej.

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

Przykład 2

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

W web.configpliku użyj powyższego klucza jako wartości parametru zamiast wartości rzeczywistej.

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

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

Uwagi dotyczące błędu throwOnError

Obecnie, jeśli podczas operacji sesji wystąpi błąd, dostawca stanu sesji zgłasza wyjątek. Zgłaszanie wyjątku wyłącza aplikację.

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 umożliwia działanie na wyjątki. Domyślne zachowanie nadal zgłasza wyjątek, gdy wystąpi błąd, zgodny z innymi dostawcami stanu sesji ASP.NET. Istniejący kod powinien działać tak samo jak wcześniej.

Jeśli ustawisz wartość throwOnError na wartość false, zamiast zgłaszać wyjątek po wystąpieniu błędu, niepowodzenie nie powiedzie się w trybie dyskretnym. Aby sprawdzić, czy wystąpił błąd, a jeśli tak, sprawdź właściwość statyczną Microsoft.Web.Redis.RedisSessionStateProvider.LastException.

Uwagi dotyczące retryTimeoutInMilliseconds

Ustawienie retryTimeoutInMilliseconds zapewnia pewną logikę, aby uprościć przypadek, w którym operacja sesji powinna ponowić próbę po awarii z powodu awarii sieci lub czegoś innego. Ustawienie retryTimeoutInMilliseconds pozwala również kontrolować limit czasu ponawiania próby lub całkowicie zrezygnować z ponawiania próby.

Jeśli ustawisz wartość retryTimeoutInMilliseconds na liczbę, na przykład 2000, gdy operacja sesji zakończy się niepowodzeniem, ponawia próbę dla 2000 milisekund przed traktowaniem jej jako błędu. Aby dostawca stanu sesji zastosował tę logikę ponawiania, wystarczy skonfigurować limit czasu. Pierwsze ponowienie próby nastąpi po 20 milisekundach, co jest wystarczające w większości przypadków, gdy wystąpi awaria sieci. Następnie ponawia próbę co sekundę, dopóki nie upłynął limit czasu. Tuż po przekroczeniu limitu czasu ponowi próbę jeszcze raz, aby upewnić się, że limit czasu nie zostanie obcięty przez (co najwyżej) jedną sekundę.

Jeśli nie uważasz, że potrzebujesz ponawiania próby lub jeśli chcesz samodzielnie obsłużyć logikę ponawiania, ustaw wartość retryTimeoutInMilliseconds na 0. Na przykład możesz nie chcieć ponowić próby podczas uruchamiania serwera Redis na tej samej maszynie co aplikacja.

Informacje o redisSerializerType

Serializacja do przechowywania wartości w usłudze Redis jest domyślnie wykonywana w formacie binarnym, który jest dostarczany przez klasę BinaryFormatter . Użyj parametru redisSerializerType , aby określić kwalifikowaną nazwę typu zestawu klasy, która implementuje wartość Microsoft.Web.Redis.ISerializer i ma niestandardową logikę serializacji i deserializacji wartości. Oto na przykład klasa serializatora Json przy użyciu 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ć:

<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ęcznej

Dodaj dyrektywę OutputCache do każdej strony, dla której chcesz buforować dane wyjściowe.

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

W poprzednim przykładzie buforowane dane strony pozostają w pamięci podręcznej przez 60 sekund, a inna wersja strony jest buforowana dla każdej kombinacji parametrów. Aby uzyskać więcej informacji na temat dyrektywy OutputCache, zobacz @OutputCache.

Po wykonaniu tych kroków aplikacja jest skonfigurowana do korzystania z dostawcy pamięci podręcznej danych wyjściowych redis.

Dostawcy pamięci podręcznej danych wyjściowych innych firm

Następne kroki

Zapoznaj się z dostawcą stanu sesji ASP.NET, aby uzyskać Azure Cache for Redis.