Poskytovatel mezipaměti výstupu ASP.NET pro Azure Cache for Redis

Zprostředkovatel výstupní mezipaměti Redis je mechanismus úložiště mimo proces pro výstupní data mezipaměti. Tato data jsou určená speciálně pro úplné odpovědi HTTP (ukládání výstupu stránky do mezipaměti). Zprostředkovatel se připojí k novému bodu rozšiřitelnosti poskytovatele výstupní mezipaměti, který byl zaveden v ASP.NET 4.

Informace o aplikacích ASP.NET Core najdete v tématu Výstup Ukládání do mezipaměti v ASP.NET jádru pomocí Redis v .NET 8.

Pokud chcete použít zprostředkovatele výstupní mezipaměti Redis, nejprve nakonfigurujte mezipaměť a potom nakonfigurujte aplikaci ASP.NET pomocí balíčku NuGet zprostředkovatele výstupní mezipaměti Redis. Tento článek obsahuje pokyny ke konfiguraci aplikace tak, aby používala zprostředkovatele výstupní mezipaměti Redis. Další informace o vytváření a konfiguraci instance Azure Cache for Redis najdete v tématu Vytvoření mezipaměti.

Uložení výstupu základní stránky ASP.NET v Redisu

Úplnou specifikaci funkcí najdete v tématu AS.NET ukládání výstupu jádra do mezipaměti.

Ukázkovou aplikaci, která demonstruje využití, najdete v tématu Webová aplikace .NET 8 s výstupem Redis Ukládání do mezipaměti a Azure Open AI.

Uložení výstupu stránky ASP.NET v Redisu

Pokud chcete nakonfigurovat klientskou aplikaci v sadě Visual Studio pomocí balíčku NuGet stavu relace Azure Cache for Redis, vyberte v nabídce Nástroje Správce balíčků NuGet Správce balíčků konzolu.

V okně Package Manager Console spusťte následující příkaz:

Install-Package Microsoft.Web.RedisOutputCacheProvider

Balíček NuGet zprostředkovatele výstupní mezipaměti Redis má závislost na balíčku StackExchange.Redis . Pokud balíček StackExchange.Redis v projektu není, nainstaluje se. Další informace o balíčku NuGet zprostředkovatele výstupní mezipaměti Redis naleznete na stránce NuGet RedisOutputCacheProvider .

Balíček NuGet stáhne a přidá požadované odkazy na sestavení a přidá do souboru web.config následující část. Tato část obsahuje požadovanou konfiguraci pro aplikaci ASP.NET pro použití zprostředkovatele výstupní mezipaměti Redis.

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

Nakonfigurujte atributy v prvním sloupci s hodnotami z vaší mezipaměti na webu Microsoft Azure Portal. Nakonfigurujte také další požadované hodnoty. Pokyny k přístupu k vlastnostem mezipaměti najdete v tématu Konfigurace nastavení Azure Cache for Redis.

Atribut Typ Výchozí Popis
_Hostitele* string "localhost" IP adresa nebo název hostitele serveru Redis
port kladné celé číslo 6379 (jiné než TLS/SSL)
6380 (TLS/SSL)
Port serveru Redis
Accesskey string "" Heslo serveru Redis při povolení autorizace Redis Hodnota je ve výchozím nastavení prázdný řetězec, což znamená, že poskytovatel stavu relace při připojení k serveru Redis nepoužívá žádné heslo. Pokud je váš server Redis ve veřejně přístupné síti, jako je Azure Cache for Redis, nezapomeňte povolit autorizaci Redis, aby se zlepšilo zabezpečení a zadalo zabezpečené heslo.
Ssl boolean false Zda se chcete připojit k serveru Redis přes protokol TLS. Tato hodnota je ve výchozím nastavení false , protože Redis ve výchozím nastavení nepodporuje protokol TLS. Pokud používáte Azure Cache for Redis, která ve výchozím nastavení podporuje SSL, nezapomeňte tuto hodnotu nastavit na true, aby se zlepšilo zabezpečení.

Port jiného typu než TLS je ve výchozím nastavení pro nové mezipaměti zakázaný. Zadejte hodnotu true pro toto nastavení pro použití portu jiného typu než TLS. Další informace o povolení portu jiného typu než TLS najdete v části Přístupové porty v článku Konfigurace mezipaměti .
databaseIdNumber kladné celé číslo 0 Tento atribut lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Zadejte, kterou databázi Redis chcete použít.
connectionTimeoutInMilliseconds kladné celé číslo Poskytl StackExchange.Redis Používá se k nastavení Připojení Timeout při vytváření StackExchange.Redis.PřipojeníionMultiplexer.
operationTimeoutInMilliseconds kladné celé číslo Poskytl StackExchange.Redis Používá se k nastavení SyncTimeout při vytváření StackExchange.Redis.PřipojeníionMultiplexer.
connectionString (platný připojovací řetězec StackExchange.Redis) string N/a Odkaz na parametr app Nastavení nebo web.config nebo jiný platný připojovací řetězec StackExchange.Redis. Tento atribut může poskytovat hodnoty pro hostitele, port, accessKey, ssl a další atributy StackExchange.Redis. Podrobnější pohled na connectionString naleznete v části Nastavení připojovacího řetězce v části Poznámky k atributům.
settingsClassName
settingsMethodName
string
string
N/a Tyto atributy lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Pomocí těchto atributů můžete poskytnout připojovací řetězec. _settingsClassName* by měl být název kvalifikované třídy sestavení, který obsahuje metodu určenou nastavenímMethodName.

Metoda zadaná nastavenímMethodName by měla být veřejná, statická a void (přijímá se bez parametrů) s návratovým typem řetězce. Tato metoda vrátí skutečný připojovací řetězec.
loggingClassName
loggingMethodName
string
string
N/a Tyto atributy lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Pomocí těchto atributů můžete ladit aplikaci tím, že poskytnete protokoly z mezipaměti Stavu relace nebo výstupu spolu s protokoly z StackExchange.Redis. loggingClassName by měl být název kvalifikované třídy sestavení, který obsahuje metodu určenou loggingMethodName.

Metoda určená logMethodName by měla být veřejná, statická a void (přijmout žádné parametry) s návratovým typem System.IO.TextWriter.
applicationName string Název modulu aktuálního procesu nebo /. Pouze SessionStateProvider
Tento atribut lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Předpona názvu aplikace, která se má použít v mezipaměti Redis. Zákazník může použít stejnou mezipaměť Redis pro různé účely. Aby se zajistilo, že klíče relace nekolidují, může mít předponu název aplikace.
Throwonerror boolean true Pouze SessionStateProvider
Tento atribut lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Zda se má vyvolat výjimka, když dojde k chybě.

Další informace o throwOnError naleznete v Poznámky k throwOnError v části Poznámky k atributům.
retryTimeoutInMilliseconds kladné celé číslo 5000 Pouze SessionStateProvider
Tento atribut lze zadat pouze prostřednictvím web.config nebo aplikace Nastavení.

Jak dlouho se má opakovat, když operace selže. Pokud je tato hodnota menší než operationTimeoutInMilliseconds, zprostředkovatel to zkusí znovu.

Další informace o retryTimeoutInMilliseconds najdete v poznámkách k retryTimeoutInMilliseconds v části Poznámky k atributům.
redisSerializerType string N/a Určuje název kvalifikovaného typu sestavení třídy, která implementuje Microsoft.Web.Redis. Serializátor a který obsahuje vlastní logiku pro serializaci a deserializaci hodnot. Další informace naleznete v tématu O redisSerializerType v oddílu Poznámky k atributu.

Poznámky k atributům

Nastavení připojovacího řetězce

Hodnota connectionString se používá jako klíč k načtení skutečného připojovací řetězec z aplikace Nastavení, pokud takový řetězec existuje v aplikaci Nastavení. Pokud v aplikaci nebyl nalezen Nastavení, hodnota connectionString se použije jako klíč k načtení skutečného připojovací řetězec z oddílu web.config Připojení ionString, pokud tento oddíl existuje. Pokud připojovací řetězec v aplikaci neexistuje Nastavení nebo oddíl web.config Připojení ionString, použije se při vytváření StackExchange.Redis.Připojení literála connectionString jako připojovací řetězec.ionMultiplexer.

Následující příklady ukazují, jak se používá connectionString .

Příklad 1

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

Místo web.configskutečné hodnoty použijte klíč jako hodnotu parametru.

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

Příklad 2

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

Místo web.configskutečné hodnoty použijte klíč jako hodnotu parametru.

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

Příklad 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>

Poznámky k throwOnError

V současné době, pokud dojde k chybě během operace relace, poskytovatel stavu relace vyvolá výjimku. Vyvolání výjimky vypne aplikaci.

Toto chování bylo změněno způsobem, který podporuje očekávání stávajících uživatelů ASP.NET stavu relace a zároveň umožňuje reagovat na výjimky. Výchozí chování stále vyvolává výjimku, pokud dojde k chybě, konzistentní s jinými poskytovateli stavu relace ASP.NET. Existující kód by měl fungovat stejně jako předtím.

Pokud nastavíte throwOnError na false, pak místo vyvolání výjimky, když dojde k chybě, selže bezobslužně. Pokud chcete zjistit, jestli došlo k chybě, a pokud ano, zjistěte, jaká výjimka byla, zkontrolujte statickou vlastnost Microsoft.Web.RedisSessionStateProvider.LastException.

Poznámky k retryTimeoutInMilliseconds

Nastavení retryTimeoutInMilliseconds poskytuje určitou logiku, která zjednodušuje případ, kdy by se operace relace měla opakovat při selhání kvůli výpadku sítě nebo kvůli nějaké jiné chybě. Nastavení retryTimeoutInMilliseconds také umožňuje řídit časový limit opakování nebo úplně odhlásit opakování.

Pokud nastavíte retryTimeoutInMilliseconds na číslo, například 2000, když operace relace selže, opakuje se po dobu 2 000 milisekund před tím, než s ní zachází jako s chybou. Pokud chcete, aby poskytovatel stavu relace použil tuto logiku opakování, stačí nakonfigurovat časový limit. První opakování proběhne po 20 milisekundách, což ve většině případů stačí, když dojde k výpadku sítě. Potom se bude opakovat každou sekundu, dokud nevyjde časový limit. Hned po vypršení časového limitu se bude opakovat ještě jednou, aby se zajistilo, že časový limit nevyřízne o jednu sekundu (maximálně).

Pokud si myslíte, že potřebujete opakovat nebo pokud chcete zpracovat logiku opakování sami, nastavte hodnotu retryTimeoutInMilliseconds na hodnotu 0. Pokud například spouštíte server Redis na stejném počítači jako vaše aplikace, možná nebudete chtít opakovat.

O redisSerializerType

Serializace pro uložení hodnot v Redis je provedena v binárním formátu ve výchozím nastavení, který je poskytován BinaryFormatter třídy. Pomocí redisSerializerType zadejte název kvalifikovaného typu sestavení třídy, která implementuje Microsoft.Web.Redis.ISerializer a má vlastní logiku pro serializaci a deserializaci hodnot. Tady je například třída serializátoru Json využívající 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);
        }
    }
}

Za předpokladu, že tato třída je definována v sestavení s názvem MyCompanyDll, můžete nastavit parametr redisSerializerType tak, aby jej používal:

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

Direktiva výstupní mezipaměti

Na každou stránku, pro kterou chcete výstup uložit do mezipaměti, přidejte direktivu OutputCache.

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

V předchozím příkladu zůstanou data stránky uložená v mezipaměti po dobu 60 sekund a pro každou kombinaci parametrů se ukládá jiná verze stránky. Další informace o direktivě OutputCache najdete v tématu @OutputCache.

Po provedení těchto kroků je vaše aplikace nakonfigurovaná tak, aby používala zprostředkovatele výstupní mezipaměti Redis.

Poskytovatelé výstupní mezipaměti třetích stran

Podívejte se na poskytovatele stavu relace ASP.NET pro Azure Cache for Redis.