Az Azure Cache for Redis ASP.NET kimeneti gyorsítótár-szolgáltatója

A Redis kimeneti gyorsítótár-szolgáltató egy folyamaton kívüli tárolási mechanizmus a kimeneti gyorsítótár adataihoz. Ezek az adatok kifejezetten a teljes HTTP-válaszokhoz (lapkimenet gyorsítótárazásához) valók. A szolgáltató a 4. ASP.NET-ben bevezetett új kimeneti gyorsítótár-szolgáltató bővíthetőségi ponthoz csatlakozik.

Az ASP.NET Core-alkalmazások esetében lásd a kimeneti gyorsítótárazást ASP.NET magban a Redis használatával a .NET 8-ban.

A Redis kimeneti gyorsítótár-szolgáltató használatához először konfigurálja a gyorsítótárat, majd konfigurálja a ASP.NET alkalmazást a Redis kimeneti gyorsítótár-szolgáltató NuGet-csomagjának használatával. Ez a cikk útmutatást nyújt az alkalmazásNak a Redis kimeneti gyorsítótár-szolgáltató használatára való konfigurálásához. Az Azure Cache for Redis-példány létrehozásáról és konfigurálásáról további információt a Gyorsítótár létrehozása című témakörben talál.

ASP.NET lap kimenetének tárolása a Redisben

A teljes funkciós specifikációért lásd AS.NET alapvető kimeneti gyorsítótárazást.

A használatot bemutató mintaalkalmazást a .NET 8 Web Application with Redis Output Caching és az Azure Open AI című témakörben talál.

ASP.NET lap kimenetének tárolása a Redisben

Ha ügyfélalkalmazást szeretne konfigurálni a Visual Studióban az Azure Cache for Redis Session State NuGet csomaggal, válassza a NuGet Csomagkezelő, Csomagkezelő Konzol lehetőséget az Eszközök menüből.

Futtassa az alábbi parancsot a Package Manager Console ablakából:

Install-Package Microsoft.Web.RedisOutputCacheProvider

A Redis kimeneti gyorsítótár-szolgáltató NuGet-csomagja függőségben van a StackExchange.Redis csomagtól. Ha a StackExchange.Redis csomag nem található meg a projektben, a rendszer telepíti. A Redis Kimeneti gyorsítótár-szolgáltató NuGet-csomagjáról további információt a RedisOutputCacheProvider NuGet oldalon talál.

A NuGet-csomag letölti és hozzáadja a szükséges szerelvényhivatkozásokat, és hozzáadja a következő szakaszt a web.config fájlhoz. Ez a szakasz a Redis kimeneti gyorsítótár-szolgáltató használatához szükséges konfigurációt tartalmazza a ASP.NET alkalmazáshoz.

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

Konfigurálja az első oszlop attribútumait a gyorsítótár értékeivel a Microsoft Azure Portalon. Emellett konfigurálja a többi kívánt értéket is. A gyorsítótár tulajdonságainak elérésére vonatkozó utasításokért tekintse meg az Azure Cache for Redis beállításainak konfigurálását.

Attribútum Típus Alapértelmezett Leírás
_Fogadó* húr "localhost" A Redis-kiszolgáló IP-címe vagy állomásneve
kikötő pozitív egész szám 6379 (nem TLS/SSL)
6380 (TLS/SSL)
Redis-kiszolgálóport
accessKey húr "" A Redis-kiszolgáló jelszava, ha a Redis-engedélyezés engedélyezve van. Az érték alapértelmezés szerint üres sztring, ami azt jelenti, hogy a munkamenet-állapotszolgáltató nem használ jelszót a Redis-kiszolgálóhoz való csatlakozáskor. Ha a Redis-kiszolgáló nyilvánosan elérhető hálózatban van, például az Azure Cache for Redisben, mindenképpen engedélyezze a Redis-engedélyezést a biztonság javítása érdekében, és adjon meg egy biztonságos jelszót.
Ssl Logikai Hamis A Redis-kiszolgálóhoz való csatlakozás TLS-en keresztül. Ez az érték alapértelmezés szerint hamis , mert a Redis alapértelmezés szerint nem támogatja a TLS-t. Ha az Azure Cache for Redist használja, amely alapértelmezés szerint támogatja az SSL-t, ügyeljen arra, hogy ezt az értéket igaz értékre állítsa a biztonság javítása érdekében.

A nem TLS-port alapértelmezés szerint le van tiltva az új gyorsítótárak esetében. Adja meg a true értéket a nem TLS-port használatához. A nem TLS-port engedélyezésével kapcsolatos további információkért tekintse meg a Gyorsítótár konfigurálása című cikk Hozzáférési portok szakaszát.
databaseIdNumber pozitív egész szám 0 Ez az attribútum csak a web.config vagy az App Gépház használatával adható meg.

Adja meg a használni kívánt Redis-adatbázist.
connectionTimeoutInMilliseconds pozitív egész szám Készítette: StackExchange.Redis A StackExchange.Redis.Csatlakozás létrehozásakor beállított Csatlakozás TimeoutionMultiplexer.
operationTimeoutInMilliseconds pozitív egész szám Készítette: StackExchange.Redis A SyncTimeout beállítására szolgál a StackExchange.Redis.Csatlakozás létrehozásakorionMultiplexer.
connectionString (Érvényes StackExchange.Redis kapcsolati sztring) húr N/a Az App Gépház vagy a web.config paraméterhivatkozása, vagy egy érvényes StackExchange.Redis kapcsolati sztring. Ez az attribútum a gazdagép, a port, az accessKey, az ssl és más StackExchange.Redis attribútumok értékeit is biztosíthatja. A connectionString részletesebb megtekintéséhez tekintse meg a ConnectionString beállítását az Attribútumjegyzetek szakaszban.
settingsClassName
settingsMethodName
húr
húr
N/a Ezek az attribútumok csak a web.config vagy az App Gépház használatával adhatók meg.

Ezekkel az attribútumokkal kapcsolati sztring adhat meg. A _settingsClassName* szerelvény minősített osztálynevének kell lennie, amely tartalmazza a settingsMethodName által megadott metódust.

A settingsMethodName által megadott metódusnak nyilvánosnak, statikusnak és érvénytelennek kell lennie (paramétereket nem fogad el), és visszatérési sztringtípussal kell rendelkeznie. Ez a metódus a tényleges kapcsolati sztring adja vissza.
loggingClassName
loggingMethodName
húr
húr
N/a Ezek az attribútumok csak a web.config vagy az App Gépház használatával adhatók meg.

Ezekkel az attribútumokkal hibakeresést végezhet az alkalmazáson a munkamenet-állapot/kimeneti gyorsítótár naplóinak és a StackExchange.Redis naplóinak megadásával. A loggingClassName szerelvény minősített osztálynévnek kell lennie, amely tartalmazza a loggingMethodName által megadott metódust.

A logMethodName által megadott metódusnak nyilvánosnak, statikusnak és érvénytelennek kell lennie (paramétereket nem fogad el), a System.IO.TextWriter visszatérési típusával.
applicationName húr Az aktuális folyamat modulneve vagy "/" Csak SessionStateProvider
Ez az attribútum csak a web.config vagy az App Gépház használatával adható meg.

A Redis Cache-ben használandó alkalmazásnév-előtag. Előfordulhat, hogy az ügyfél ugyanazt a Redis-gyorsítótárat használja különböző célokra. Annak érdekében, hogy a munkamenet-kulcsok ne ütközhessenek egymással, előtagként az alkalmazás nevével lehet rendelkezni.
throwOnError Logikai true Csak SessionStateProvider
Ez az attribútum csak a web.config vagy az App Gépház használatával adható meg.

Kivételt ad-e ki hiba esetén.

További információ a throwOnErrorról: Notes on throwOnError az Attribútumjegyzetek szakaszban.
retryTimeoutInMilliseconds pozitív egész szám 5000 Csak SessionStateProvider
Ez az attribútum csak a web.config vagy az App Gépház használatával adható meg.

Mennyi ideig kell újrapróbálkoznia, ha egy művelet meghiúsul. Ha ez az érték kisebb, mint az operationTimeoutInMilliseconds, a szolgáltató nem próbálkozik újra.

Az újrapróbálkozásiTimeoutInMillisecondsról további információt az Attribútumjegyzetek szakaszban az újrapróbálkozásiTimeoutInMilliseconds újrapróbálkozási megjegyzéseicímű szakaszban talál.
redisSerializerType húr N/a Megadja a Microsoft.Web.Redist implementáló osztály szerelvény-minősített típusnevét. Szerializáló, amely tartalmazza az értékek szerializálására és deszerializálására vonatkozó egyéni logikát. További információ: About redisSerializerType in the Attribute notes section.

Attribútumjegyzetek

ConnectionString beállítása

A connectionString értéke kulcsként szolgál a tényleges kapcsolati sztring appból való lekéréséhez Gépház ha létezik ilyen sztring az Appban Gépház. Ha nem található az App Gépház-ben, a connectionString értéke kulcsként szolgál a web.config Csatlakozás ionString szakasz tényleges kapcsolati sztring lekéréséhez, ha ez a szakasz létezik. Ha a kapcsolati sztring nem létezik az App Gépház vagy a web.config Csatlakozás ionString szakaszban, a rendszer a connectionString literális értékét használja kapcsolati sztring a StackExchange.Redis.Csatlakozás létrehozásakorionMultiplexer.

Az alábbi példák a connectionString használatát szemléltetik.

1. példa

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

Ebben web.configaz esetben a kulcsot használja paraméterértékként a tényleges érték helyett.

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

2. példa

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

Ebben web.configaz esetben a kulcsot használja paraméterértékként a tényleges érték helyett.

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

3. példa

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

Megjegyzések a throwOnErrorról

Jelenleg, ha egy munkamenet-művelet során hiba történik, a munkamenet-állapotszolgáltató kivételt jelez. A kivétel eldobása leállítja az alkalmazást.

Ezt a viselkedést úgy módosították, hogy az megfeleljen a meglévő ASP.NET munkamenet-állapotszolgáltatói felhasználók elvárásainak, ugyanakkor lehetővé teszi a kivételek elhárítását is. Az alapértelmezett viselkedés továbbra is kivételt okoz, ha hiba lép fel, összhangban más ASP.NET munkamenet-állapotszolgáltatókkal. A meglévő kódnak ugyanúgy kell működnie, mint korábban.

Ha a throwOnError értéket hamis értékre állítja, akkor ahelyett, hogy kivételt ad meg hiba esetén, az csendesen meghiúsul. Ha ellenőrizni szeretné, hogy hiba történt-e, és ha igen, felderítse a kivételt, ellenőrizze a Microsoft.Web.Redis.RedisSessionStateProvider.LastException statikus tulajdonságot.

Megjegyzések az újrapróbálkozásiTimeoutInMillisecondshoz

Az újrapróbálkozásiTimeoutInMilliseconds beállítás némi logikával leegyszerűsíti azt az esetet, amikor egy munkamenet-művelet hálózati hiba vagy valami más miatt újrapróbálkozott. Az újrapróbálkozási IdőoutInMilliseconds beállítással szabályozhatja az újrapróbálkozási időtúllépést, vagy teljesen kikapcsolhatja az újrapróbálkozást.

Ha az újrapróbálkozásiTimeoutInMilliseconds értéket egy számra állítja, például 2000-re, amikor egy munkamenet-művelet meghiúsul, az újrapróbálkozás 2000 ezredmásodpercre történik, mielőtt hibaként kezelnénk. Ha azt szeretné, hogy a munkamenet-állapotszolgáltató alkalmazza ezt az újrapróbálkozési logikát, konfigurálja az időtúllépést. Az első újrapróbálkozás 20 ezredmásodperc után következik be, ami a legtöbb esetben elegendő, ha hálózati hiba történik. Ezután minden másodpercben újra próbálkozik, amíg ki nem fordul. Közvetlenül az időtúllépés után újrapróbálkozza még egyszer, hogy meggyőződjön arról, hogy az időtúllépést (legfeljebb) egy másodperccel nem fogja megszakítani.

Ha úgy gondolja, hogy nem kell újrapróbálkoznia, vagy ha saját maga szeretné kezelni az újrapróbálkozási logikát, állítsa a retryTimeoutInMilliseconds értéket 0 értékre. Előfordulhat például, hogy nem szeretne újra próbálkozni, ha a Redis-kiszolgálót ugyanazon a gépen futtatja, mint az alkalmazás.

Tudnivalók a redisSerializerType-ról

A Redisen tárolt értékek szerializálása alapértelmezés szerint bináris formátumban történik, amelyet a BinaryFormatter osztály biztosít. A RedisSerializerType használatával megadhatja a Microsoft.Web.Redis.ISerializert implementáló osztály szerelvény-minősített típusnevét, és egyéni logikával szerializálja és deszerializálja az értékeket. Íme például egy Json szerializáló osztály a JSON.NET használatával:

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);
        }
    }
}

Feltételezve, hogy ez az osztály egy MyCompanyDll nevű szerelvényben van definiálva, a redisSerializerType paramétert beállíthatja annak használatára:

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

Kimeneti gyorsítótár irányelve

Adjon hozzá egy OutputCache-direktívát minden olyan laphoz, amelyhez gyorsítótárazza a kimenetet.

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

Az előző példában a gyorsítótárazott lapadatok 60 másodpercig maradnak a gyorsítótárban, és a lap egy másik verziója lesz gyorsítótárazva minden paraméterkombinációhoz. Az OutputCache irányelvről további információt a @OutputCache talál.

A lépések elvégzése után az alkalmazás konfigurálva van a Redis kimeneti gyorsítótár-szolgáltató használatára.

Külső kimeneti gyorsítótár-szolgáltatók

Tekintse meg az Azure Cache for Redis ASP.NET munkamenet-állapotszolgáltatót.