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

Zprostředkovatel výstupní mezipaměti Redis je mechanismus mimoprocesového úložiště 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 zprostředkovatele výstupní mezipaměti, který byl zaveden v ASP.NET 4. Pokud ASP.NET Core aplikace, přečtěte si článek Ukládání odpovědí do mezipaměti v ASP.NET Core.

Pokud chcete použít zprostředkovatele výstupní mezipaměti Redis, nejprve nakonfigurujte mezipaměť a pak nakonfigurujte aplikaci ASP.NET pomocí balíčku NuGet zprostředkovatele výstupní mezipaměti Redis. Tento článek obsahuje pokyny ke konfiguraci aplikace pro použití zprostředkovatele výstupní mezipaměti Redis. Další informace o vytvoření a konfiguraci instance Azure Cache for 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 sadě Visual Studio pomocí balíčku NuGet Azure Cache for Redis Stav relace, v nabídce Nástroje vyberte Správce balíčků NuGet, konzola Správce balíčků.

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 je závislý na balíčku StackExchange.Redis. Pokud balíček StackExchange.Redis není v projektu, je nainstalovaný. Další informace o balíčku NuGet zprostředkovatele výstupní mezipaměti Redis najdete 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í oddíl. Tato část obsahuje požadovanou konfiguraci, aby aplikace ASP.NET používala 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 vlevo pomocí hodnot z mezipaměti v microsoft Azure Portal. Nakonfigurujte také další požadované hodnoty. Pokyny pro přístup k vlastnostem mezipaměti najdete v tématu Konfigurace nastavení Azure Cache for Redis.

Atribut Typ Výchozí Popis
Hostitele řetězec "localhost" IP adresa serveru Redis nebo název hostitele
Port kladné celé číslo 6379 (bez protokolu TLS/SSL)
6380 (TLS/SSL)
Port serveru Redis
Accesskey řetězec "" Heslo serveru Redis, pokud 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 for Redis, nezapomeňte povolit autorizaci Redis, abyste zlepšili zabezpečení, a zadejte zabezpečené heslo.
Ssl boolean False Jestli 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 bez protokolu TLS je ve výchozím nastavení pro nové mezipaměti zakázaný. Zadejte hodnotu true pro toto nastavení, aby se používal port bez protokolu TLS. Další informace o povolení portu bez protokolu 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 databázi Redis, která se má použít.
connectionTimeoutInMilliseconds kladné celé číslo Poskytuje StackExchange.Redis Používá se k nastavení ConnectTimeout při vytváření StackExchange.Redis.ConnectionMultiplexer.
operationTimeoutInMilliseconds kladné celé číslo Poskytuje StackExchange.Redis Používá se k nastavení SyncTimeout při vytváření StackExchange.Redis.ConnectionMultiplexer.
connectionString (platný připojovací řetězec StackExchange.Redis) řetězec N/a Buď odkaz na parametr AppSettings nebo web.config, nebo v opačném případě platný připojovací řetězec StackExchange.Redis. Tento atribut může poskytovat hodnoty pro atribut host, port, accessKey, ssl a další atributy StackExchange.Redis. Bližší pohled na connectionString najdete v části Nastavení connectionString v části Poznámky k atributům .
settingsClassName
settingsMethodName
řetězec
řetězec
N/a Tyto atributy lze zadat pouze prostřednictvím web.config nebo AppSettings.

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

Metoda určená nastavenímMethodName by měla být veřejná, statická a void (bez parametrů) s návratovým typem řetězce. Tato metoda vrátí skutečný připojovací řetězec.
loggingClassName
loggingMethodName
řetězec
řetězec
N/a 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ýstupní mezipaměti spolu s protokoly ze služby StackExchange.Redis. loggingClassName by měl být kvalifikovaný název třídy sestavení, který obsahuje metodu určenou pomocí 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.
název_aplikace řetězec 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 stejnou mezipaměť Redis používat k různým účelům. Abyste měli jistotu, že klíče relace nebudou kolidovat, může být předpona s názvem aplikace.
Throwonerror boolean true Pouze sessionStateProvider
Tento atribut lze zadat pouze prostřednictvím web.config nebo AppSettings.

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

Další informace o funkci throwOnError najdete v části Poznámky k chybě 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ž se operace nezdaří Pokud je tato hodnota menší než operationTimeoutInMilliseconds, zprostředkovatel to nebude opakovat.

Další informace o retryTimeoutInMilliseconds najdete v části Poznámky k retryTimeoutInMilliseconds v části Poznámky k atributům .
redisSerializerType řetězec N/a Určuje název kvalifikovaného typu sestavení třídy, která implementuje Microsoft.Web.Redis. Serializátor a obsahuje vlastní logiku pro serializaci a deserializaci hodnot. Další informace najdete v části Informace o typu redisSerializerType v části Poznámky k atributům .

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 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 tento oddíl existuje. Pokud připojovací řetězec neexistuje v AppSettings nebo v části web.config ConnectionString , použije se jako připojovací řetězec při vytváření StackExchange.Redis.ConnectionMultiplexer hodnota literálu 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>

V web.confignástroji použijte výše uvedený klíč jako hodnotu parametru místo skutečné hodnoty.

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

V web.confignástroji použijte výše uvedený klíč jako hodnotu parametru místo skutečné hodnoty.

<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 chybě throwOnError

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

Toto chování bylo změněno způsobem, který podporuje očekávání stávajících uživatelů zprostředkovatele stavu relace ASP.NET a zároveň umožňuje reagovat na výjimky. Výchozí chování stále vyvolává výjimku, když 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 hodnotu throwOnError na false, pak místo vyvolání výjimky při výskytu chyby selže bezobslužně. Pokud chcete zjistit, jestli došlo k chybě, a pokud ano, zjistit, jaká byla výjimka, zkontrolujte statickou vlastnost Microsoft.Web.Redis.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 chybě sítě nebo něčemu jinému. 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 2000 milisekund a pak ji považuje za chybu. Pokud chcete, aby zprostředkovatel stavu relace použil 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ů stačí, když dojde k chybě sítě. Potom se bude opakovat každou sekundu, dokud nevypadne časový limit. Hned po vypršení časového limitu to zkusí ještě jednou, aby se zajistilo, že časový limit nezkrátí (maximálně) o jednu sekundu.

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

O redisSerializerType

Serializace pro ukládání hodnot na Redis se provádí 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 serializovat a deserializovat hodnoty. Tady je například třída serializátoru JSON použí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 je tato třída definovaná v sestavení s názvem MyCompanyDll, můžete nastavit parametr redisSerializerType tak, aby ho 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 uložit výstup 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 do mezipaměti 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

Další kroky

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