ASP.NET Poskytovatel výstupní mezipaměti pro Azure cache pro Redis

Zprostředkovatel výstupní mezipaměti Redis je nezpracovávající mechanismus úložiště pro data výstupní mezipaměti. Tato data jsou určena konkrétně 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 zprostředkovatele výstupní mezipaměti, který byl představen v ASP.NET 4. v případě ASP.NET Core aplikací číst ukládání odpovědí do mezipaměti v ASP.NET Core.

pokud chcete použít poskytovatele výstupní mezipaměti Redis, nejdřív nakonfigurujte mezipaměť a pak nakonfigurujte svou aplikaci ASP.NET pomocí balíčku NuGet zprostředkovatele výstupní mezipaměti Redis. Tento článek poskytuje pokyny ke konfiguraci aplikace pro použití poskytovatele výstupní mezipaměti Redis. Další informace o vytváření a konfiguraci mezipaměti Azure pro instanci Redis najdete v tématu vytvoření mezipaměti.

uložení výstupu ASP.NET stránky do mezipaměti

pokud chcete nakonfigurovat klientskou aplikaci v Visual Studio pomocí balíčku NuGet stavu relace Azure Cache for Redis, vyberte NuGet Správce balíčků, konzola Správce balíčků v nabídce nástroje .

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 se v projektu nenachází balíček StackExchange. Redis, je nainstalován. další informace o NuGet balíčku poskytovatele výstupní mezipaměti Redis najdete na stránce NuGet RedisOutputCacheProvider .

balíček NuGet stahuje a přidává požadované odkazy na sestavení a přidá následující oddíl do souboru web.config. tato část obsahuje požadovanou konfiguraci pro vaši aplikaci ASP.NET, aby používala poskytovatele 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 vlevo pomocí hodnot z mezipaměti na portálu Microsoft Azure. Nakonfigurujte také další požadované hodnoty. Pokyny k přístupu k vlastnostem mezipaměti najdete v tématu Konfigurace nastavení služby Azure cache pro Redis.

Atribut Typ Výchozí Description
provoz řetězec místního IP adresa nebo název hostitele serveru Redis
přístavní kladné celé číslo 6379 (bez TLS/SSL)
6380 (TLS/SSL)
Port serveru Redis
accessKey řetězec "" Redis heslo serveru, když je povolená autorizace Redis. Hodnota je ve výchozím nastavení prázdný řetězec, což znamená, že zprostředkovatel stavu relace nebude při připojení k serveru Redis používat žádné heslo. Pokud je váš server Redis ve veřejně přístupné síti, jako je Azure cache pro Redis, Nezapomeňte povolit autorizaci Redis pro zvýšení zabezpečení a zadat zabezpečené heslo.
zabezpečení boolean chybné Zda se chcete připojit k serveru Redis prostřednictvím protokolu TLS. Ve výchozím nastavení je tato hodnota false , protože Redis standardně nepodporuje protokol TLS. Pokud používáte službu Azure cache pro Redis, která ve výchozím nastavení podporuje protokol SSL, nastavte tuto hodnotu na true, aby se zlepšilo zabezpečení.

Port bez protokolu TLS je ve výchozím nastavení pro nové mezipaměti zakázán. Pro toto nastavení zadejte hodnotu true , pokud chcete použít port bez protokolu TLS. Další informace o povolení portu bez TLS najdete v části přístupové porty v článku Konfigurace mezipaměti .
databaseIdNumber kladné celé číslo 0 Tento atribut lze zadat pouze pomocí web.config nebo AppSettings.

Určete, která databáze Redis se má použít.
connectionTimeoutInMilliseconds kladné celé číslo Poskytuje StackExchange. Redis Slouží k nastavení ConnectTimeout při vytváření stackexchange. Redis. ConnectionMultiplexer.
operationTimeoutInMilliseconds kladné celé číslo Poskytuje StackExchange. Redis Slouží k nastavení SyncTimeout při vytváření stackexchange. Redis. ConnectionMultiplexer.
ConnectionString (platný připojovací řetězec stackexchange. Redis) řetězec není k dispozici Buď odkaz na parametr AppSettings nebo web.config, nebo jinak platný připojovací řetězec StackExchange. Redis. Tento atribut může poskytovat hodnoty pro hostitel, port, AccessKey, SSL a další atributy stackexchange. Redis. Bližší pohled na ConnectionString najdete v tématu Nastavení ConnectionString v oddílu poznámky k atributu .
settingsClassName
settingsMethodName
řetězec
řetězec
není k dispozici Tyto atributy lze zadat pouze pomocí web.config nebo AppSettings.

Tyto atributy použijte k poskytnutí připojovacího řetězce. settingsClassName by měl být kvalifikovaný název třídy sestavení, který obsahuje metodu určenou parametrem settingsMethodName.

Metoda určená parametrem settingsMethodName by měla být veřejná, statická a void (nepřijímá žádné parametry) s návratovým typem řetězce. Tato metoda vrátí skutečný připojovací řetězec.
loggingClassName
loggingMethodName
řetězec
řetězec
není k dispozici Tyto atributy lze zadat pouze pomocí web.config nebo AppSettings.

Tyto atributy použijte k ladění aplikace poskytováním protokolů z stavu relace/výstupní mezipaměti spolu s protokoly z StackExchange. Redis. loggingClassName by měl být kvalifikovaný název třídy sestavení, který obsahuje metodu určenou parametrem loggingMethodName.

Metoda určená parametrem loggingMethodName by měla být public, static a void (nepřijímat žádné parametry) s návratovým typem System. IO. TextWriter.
applicationName řetězec Název modulu aktuálního procesu nebo "/" Jenom SessionStateProvider
Tento atribut lze zadat pouze pomocí web.config nebo AppSettings.

Předpona názvu aplikace, která se má použít v Redis Cache Zákazník může používat stejnou mezipaměť Redis pro různé účely. Aby se zajistilo, že klíče relace nebudou kolidovat, může být předpona s názvem aplikace.
Parametr throwOnError boolean true Jenom SessionStateProvider
Tento atribut lze zadat pouze pomocí web.config nebo AppSettings.

Určuje, zda má být při výskytu chyby vyvolána výjimka.

Další informace o parametr throwOnError naleznete v tématu poznámky k parametr throwOnError v oddílu poznámky k atributu .
retryTimeoutInMilliseconds kladné celé číslo 5000 Jenom SessionStateProvider
Tento atribut lze zadat pouze pomocí web.config nebo AppSettings.

Doba, po kterou se bude opakovat pokus o neúspěch operace. Pokud je tato hodnota menší než operationTimeoutInMilliseconds, zprostředkovatel se znovu neopakuje.

Další informace o retryTimeoutInMilliseconds naleznete v tématu poznámky k retryTimeoutInMilliseconds v oddílu poznámky k atributu .
redisSerializerType řetězec není k dispozici Určuje kvalifikovaný název typu sestavení třídy, která implementuje Microsoft. Web. Redis. Serializátor a obsahující vlastní logiku k serializaci a deserializaci hodnot. Další informace naleznete v části o redisSerializerType v oddílu poznámky k atributu .

Poznámky k atributu

Nastavení připojovacího řetězce

Hodnota ConnectionString se používá jako klíč k načtení skutečného připojovacího řetězce z appSettings, pokud takový řetězec existuje v appSettings. Pokud se v elementu AppSettings nenajde, hodnota ConnectionString se použije jako klíč k načtení skutečného připojovacího řetězce z oddílu web.config ConnectionString , pokud tato část existuje. Pokud připojovací řetězec v oddílu AppSettings nebo web.config ConnectionString neexistuje, použije se při vytváření stackexchange. Redis. ConnectionMultiplexer hodnota literálu ConnectionString jako připojovací řetězec.

Následující příklady znázorňují, jak se používá připojovací řetězec .

Příklad 1

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

V web.config použijte místo skutečné hodnoty klíč jako hodnotu parametru.

<sessionState mode="Custom" customProvider="MySessionStateStore">
    <providers>
        <add type = "Microsoft.Web.Redis.RedisSessionStateProvide"
             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>

V web.config použijte místo skutečné hodnoty klíč jako hodnotu parametru.

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

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

Poznámky k parametr throwOnError

Pokud v současné době dojde k chybě během operace relace, vyvolá zprostředkovatel stavu relace výjimku. Vyvolání výjimky ukončí aplikaci.

toto chování bylo upraveno způsobem, který podporuje očekávání stávajících ASP.NET uživatelů zprostředkovatele stavu relace a zároveň umožňuje pracovat s výjimkami. výchozí chování stále vyvolá výjimku, pokud dojde k chybě, která je konzistentní s jinými zprostředkovateli stavu relace ASP.NET. Existující kód by měl fungovat stejně jako předtím.

Pokud nastavíte parametr throwOnError na hodnotu false, potom namísto vyvolání výjimky, pokud dojde k chybě, dojde k tiché chybě. Chcete-li zjistit, zda došlo k chybě, a pokud ano, zjistíte, co byla výjimka, zkontrolujte statickou vlastnost Microsoft. Web. Redis. RedisSessionStateProvider. LastException.

Poznámky k retryTimeoutInMilliseconds

Nastavení retryTimeoutInMilliseconds poskytuje určitou logiku pro zjednodušení případu, kdy by se operace relace měla opakovat při selhání kvůli síťovému porucha nebo něčemu jinému. Nastavení retryTimeoutInMilliseconds také umožňuje řídit časový limit opakování nebo úplně odhlásit z opakování.

Pokud retryTimeoutInMilliseconds nastavíte na číslo, například 2000, když se operace relace nezdařila, pokusy se znovu pokusí o 2000 milisekundy, než se zpracuje jako chyba. Pokud chcete, aby zprostředkovatel stavu relace použili tuto logiku opakování, stačí nakonfigurovat časový limit. K prvnímu opakování dojde po 20 milisekundách, což ve většině případů postačuje, když dojde k síťovému poruchau. Pak se to opakuje každou sekundu, dokud nevyprší časový limit. Hned po vypršení časového limitu se to opakuje ještě jednou, aby se zajistilo, že nezíská časový limit (nejvýše) jednu sekundu.

Pokud si nejste vědomi, že to budete potřebovat, nebo pokud chcete logiku opakování zpracovat sami, nastavte retryTimeoutInMilliseconds na hodnotu 0. Například možná nebudete chtít opakovat při spuštění serveru Redis ve stejném počítači jako vaše aplikace.

O redisSerializerType

Serializace pro uložení hodnot na Redis je provedena v binárním formátu ve výchozím nastavení, což je poskytováno třídou BinaryFormatter . Použijte redisSerializerType k určení kvalifikovaného názvu typu sestavení třídy, která implementuje Microsoft. Web. Redis. ISerializer a má vlastní logiku k serializaci a deserializaci hodnot. Například tady je třída serializátoru JSON s použitím 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 je tato třída definována v sestavení s názvem MyCompanyDll, můžete nastavit parametr redisSerializerType na použití:

<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

Přidejte direktivu OutputCache na každou stránku, pro kterou chcete výstup ukládat do mezipaměti.

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

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

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

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

Další kroky

podívejte se na zprostředkovatele stavu relace ASP.NET pro Azure Cache pro Redis.