Udostępnij za pośrednictwem


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.

Aby uzyskać informacje o aplikacjach ASP.NET Core, zobacz Buforowanie danych wyjściowych w ASP.NET core przy użyciu usługi Redis na platformie .NET 8.

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 wyjściowej pamięci podręcznej Redis. Ten artykuł zawiera wskazówki dotyczące konfigurowania aplikacji do korzystania z dostawcy usługi Redis Output Cache.

Przechowywanie danych wyjściowych strony podstawowej ASP.NET w usłudze Redis

Aby uzyskać pełną specyfikację funkcji, zobacz ASP.NET podstawowe buforowanie danych wyjściowych.

Aby zapoznać się z przykładową aplikacją demonstrującymi użycie, zobacz .NET 8 Web Application with Redis Output Caching and Azure OpenAI (Aplikacja internetowa platformy .NET 8 z buforowaniem wyjściowym usługi Redis i usługą Azure OpenAI).

Przechowywanie danych wyjściowych strony ASP.NET w usłudze Redis

Aby skonfigurować aplikację kliencką w programie Visual Studio przy użyciu pakietu NuGet stanu sesji usługi Azure Cache for Redis, wybierz pozycję NuGet Menedżer pakietów, Menedżer pakietów Konsola z 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 wyjściowej Redis ma zależność od pakietu StackExchange.Redis . Jeśli pakiet StackExchange.Redis nie jest obecny w projekcie, zostanie zainstalowany. Aby uzyskać więcej informacji na temat pakietu NuGet dostawcy pamięci podręcznej wyjściowej Redis, 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 usługi Redis Output Cache.

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

Skonfiguruj atrybuty w pierwszej kolumnie przy użyciu wartości z pamięci podręcznej w witrynie Microsoft Azure Portal. 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ń usługi Azure Cache for Redis.

Atrybut Typ Domyślny opis
_gospodarz* string "localhost" Adres IP serwera Redis lub nazwa hosta
port dodatnia liczba całkowita 6379 (bez protokołu TLS/SSL)
6380 (TLS/SSL)
10000 dla usługi Redis Enterprise i Azure Managed Redis (wersja zapoznawcza)
Port serwera Redis
accessKey string "" 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 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 podania 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 usługi Azure Cache for Redis, która domyślnie obsługuje protokół SSL, upewnij się, że ta wartość ma wartość 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 pliku 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 obiektu StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds dodatnia liczba całkowita Dostarczone przez StackExchange.Redis Służy do ustawiania parametru SyncTimeout podczas tworzenia obiektu StackExchange.Redis.ConnectionMultiplexer.
connectionString (Valid StackExchange.Redis parametry połączenia) string N/a Odwołanie do parametru AppSettings lub web.config albo prawidłowe parametry połączenia StackExchange.Redis. Ten atrybut może udostępniać wartości dla atrybutów host, port, accessKey, ssl i inne atrybuty StackExchange.Redis. Aby zapoznać się bliżej z ciągiem connectionString, zobacz Ustawianie parametrów connectionString w sekcji Uwagi o atrybutach.
settingsClassName
settingsMethodName
string
string
N/a Te atrybuty można określić tylko za pośrednictwem pliku web.config lub AppSettings.

Użyj tych atrybutów, aby podać parametry połączenia. _settingsClassName* powinna być kwalifikowaną nazwą klasy zestawu zawierającą metodę określoną przez ustawieniaMethodName.

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

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

Metoda określona przez metodę loggingMethodName powinna być publiczna, statyczna i void (nie akceptuje parametrów) z zwracanym typem Elementu System.IO.TextWriter.
applicationName string Nazwa modułu bieżącego procesu lub "/" Tylko sessionStateProvider
Ten atrybut można określić tylko za pośrednictwem pliku web.config lub AppSettings.

Prefiks nazwy aplikacji do użycia w pamięci podręcznej Redis Cache. Klient może używać tej samej pamięci podręcznej Redis Cache do różnych celów. Aby upewnić się, że klucze sesji nie zderzają się, można go prefiksować przy użyciu nazwy aplikacji.
throwOnError boolean prawda Tylko sessionStateProvider
Ten atrybut można określić tylko za pośrednictwem pliku 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 Tylko sessionStateProvider
Ten atrybut można określić tylko za pośrednictwem pliku web.config lub AppSettings.

Jak długo należy ponowić próbę w przypadku niepowodzenia operacji. Jeśli ta wartość jest mniejsza niż operationTimeoutInMilliseconds, dostawca nie ponawia próby.

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

Uwagi dotyczące atrybutów

Ustawianie parametru connectionString

Wartość connectionString jest używana jako klucz do pobrania rzeczywistej parametry połączenia z appSettings, jeśli taki ciąg istnieje w usłudze AppSettings. Jeśli nie znaleziono elementu AppSettings, wartość connectionString jest używana jako klucz do pobierania rzeczywistych parametry połączenia z sekcji web.config ConnectionString, jeśli ta sekcja istnieje. Jeśli parametry połączenia nie istnieje w sekcji AppSettings lub web.config ConnectionString, wartość literału connectionString jest używana jako parametry połączenia podczas tworzenia stackExchange.Redis.ConnectionMultiplexer.

W poniższych przykładach pokazano, jak jest używana funkcja 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 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 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 w przypadku wyjątków. Domyślne zachowanie nadal zgłasza wyjątek w przypadku wystąpienia błędu zgodnego z innymi dostawcami stanu sesji ASP.NET. Istniejący kod powinien działać tak samo jak poprzednio.

Jeśli ustawisz wartość throwOnError na false, zamiast zgłaszać wyjątek w przypadku wystąpienia błędu, błąd kończy się niepowodzeniem dyskretnie. Aby sprawdzić, czy wystąpił błąd, a jeśli tak, sprawdź właściwość statyczną Microsoft.Web.Redis.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ób 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 prób, wystarczy skonfigurować limit czasu. Pierwsze ponowienie próby nastąpi po upływie 20 milisekund, co jest wystarczające w większości przypadków, gdy wystąpi awaria sieci. Następnie będzie ponawiać próbę co sekundę, aż upłynął limit czasu. Zaraz po przekroczeniu limitu czasu ponawia próbę jeszcze raz, aby upewnić się, że limit czasu nie zostanie skrócony o (co najwyżej) sekundę.

Jeśli nie uważasz, że musisz ponowić próbę lub jeśli chcesz samodzielnie obsłużyć logikę ponawiania prób, 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 udostępniany przez klasę BinaryFormatter . Użyj właściwości redisSerializerType , aby określić kwalifikowaną nazwę typu zestawu klasy, która implementuje wartości Microsoft.Web.Redis.ISerializer i ma niestandardową logikę serializacji i deserializacji wartości. Oto na przykład klasa serializatora Json używająca 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 zostanie skonfigurowana do korzystania z dostawcy pamięci podręcznej Redis Output Cache.

Zewnętrzni dostawcy wyjściowej pamięci podręcznej

Zapoznaj się z dostawcą stanu sesji ASP.NET dla usługi Azure Cache for Redis.