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 Ukládání výstupu 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.
Uložení výstupu základní stránky ASP.NET v Redisu
Úplnou specifikaci funkcí najdete v tématu ASP.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 ukládáním výstupu Redis do mezipaměti a Azure OpenAI.
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 |
---|---|---|---|
_hostitel* | string | "localhost" | IP adresa nebo název hostitele serveru Redis |
port | kladné celé číslo | 6379 (jiné než TLS/SSL) 6380 (TLS/SSL) 10000 pro Redis Enterprise a Azure Managed Redis (Preview) |
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 AppSettings. Zadejte, kterou databázi Redis chcete použít. |
connectionTimeoutInMilliseconds | kladné celé číslo | Poskytl StackExchange.Redis | Slouží k nastavení ConnectTimeout při vytváření StackExchange.Redis.ConnectionMultiplexer. |
operationTimeoutInMilliseconds | kladné celé číslo | Poskytl StackExchange.Redis | Používá se k nastavení SyncTimeout při vytváření StackExchange.Redis.ConnectionMultiplexer. |
connectionString (platný připojovací řetězec StackExchange.Redis) | string | není k dispozici | Odkaz na parametr appSettings nebo web.config nebo jiný platný stackExchange.Redis připojovací řetězec. 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 |
není k dispozici | Tyto atributy lze zadat pouze prostřednictvím web.config nebo AppSettings. 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 |
není k dispozici | Tyto atributy lze zadat pouze prostřednictvím web.config nebo AppSettings. 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 AppSettings. 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 AppSettings. 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 AppSettings. 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 | není k dispozici | 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 AppSettings, pokud takový řetězec existuje v AppSettings. Pokud v AppSettings nebyla nalezena, hodnota connectionString se použije jako klíč k načtení skutečné připojovací řetězec z oddílu web.config ConnectionString, pokud tento oddíl existuje. Pokud připojovací řetězec v Části AppSettings nebo web.config ConnectionString neexistuje, použije se jako připojovací řetězec při vytváření StackExchange.Redis.ConnectionMultiplexer literál hodnota connectionString.
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.config
skuteč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.config
skuteč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
Související obsah
Podívejte se na poskytovatele stavu relace ASP.NET pro Azure Cache for Redis.