Megosztás a következőn keresztül:


A ASP.NET Core gyorsítótárazásának áttekintése

Jegyzet

Ez nem a cikk legújabb verziója. Az aktuális kiadást lásd ennek a cikknek a .NET 9-es verziójában.

Figyelmeztetés

A ASP.NET Core ezen verziója már nem támogatott. További információ: .NET és .NET Core támogatási szabályzat. Az aktuális kiadást lásd ennek a cikknek a .NET 9-es verziójában.

Fontos

Ezek az információk egy olyan előzetes termékre vonatkoznak, amelyet a kereskedelmi forgalomba kerülés előtt jelentősen módosíthatnak. A Microsoft nem vállal kifejezett vagy hallgatólagos szavatosságot az itt megadott információkra vonatkozóan.

Az aktuális kiadást lásd ennek a cikknek a .NET 9-es verziójában.

Készítette: Rick Anderson és Tom Dykstra

Memóriabeli gyorsítótárazás

A memóriabeli gyorsítótárazás kiszolgálói memóriát használ a gyorsítótárazott adatok tárolásához. Ez a gyorsítótárazási típus alkalmas egyetlen kiszolgálóhoz vagy több kiszolgálóhoz, amelyek munkamenet-affinitást használnak. A munkamenet-affinitást más néven ragadós ülések-nek is nevezik. A munkamenet-affinitás azt jelenti, hogy az ügyféltől érkező kérések mindig ugyanarra a kiszolgálóra vannak irányítva feldolgozás céljából.

További információért lásd: Gyorsítótár a memóriában az ASP.NET Core-ban és Az Azure Application Gateway munkamenet-affinitási problémáinak hibaelhárítása.

Elosztott gyorsítótár

Elosztott gyorsítótár használatával tárolhatja az adatokat, ha az alkalmazást felhőben vagy kiszolgálófarmban üzemeltetik. A gyorsítótár meg van osztva a kéréseket feldolgozó kiszolgálók között. Az ügyfél elküldhet egy kérelmet, amelyet a csoport bármely kiszolgálója kezel, ha az ügyfél gyorsítótárazott adatai elérhetők. ASP.NET Core az SQL Server, Redisés NCache elosztott gyorsítótárakkal működik.

További információért lásd a(z) ASP.NET Core Elosztott gyorsítótárazás .

HybridCache

A HybridCache API áthidal néhány rést a IDistributedCache és IMemoryCache API-kban. HybridCache egy alapértelmezett implementációval rendelkező absztrakt osztály, amely a gyorsítótárba való mentés és a gyorsítótárból való lekérés legtöbb aspektusát kezeli.

Funkciók

HybridCache az alábbi funkciókkal rendelkezik, amelyekkel a többi API nem rendelkezik:

  • Egységes API a folyamaton belüli és kívüli gyorsítótárazáshoz.

    A HybridCache úgy lett kialakítva, hogy a meglévő IDistributedCache és IMemoryCache használat helyettesítésére szolgáljon, és egy egyszerű API-t biztosít az új gyorsítótárazási kód hozzáadásához. Ha az alkalmazás IDistributedCache implementációval rendelkezik, a HybridCache szolgáltatás azt használja az másodlagos gyorsítótárazáshoz. Ez a kétszintű gyorsítótárazási stratégia lehetővé teszi, hogy HybridCache biztosítsa a memóriabeli gyorsítótár sebességét és az elosztott vagy állandó gyorsítótár tartósságát.

  • Stampedevédelem.

    Gyorsítótár-roham akkor fordul elő, ha egy gyakran használt gyorsítótár-bejegyzés érvényét veszti, és túl sok kérés próbálja meg egyszerre újratölteni ugyanazt a gyorsítótár-bejegyzést. HybridCache kombinálja az egyidejű műveleteket, biztosítva, hogy az adott válaszra vonatkozó összes kérés megvárja az első kérést a gyorsítótár feltöltésére.

  • Konfigurálható szerializálás.

    A szerializálás a szolgáltatás regisztrálásának részeként van konfigurálva, és támogatja a típusspecifikus és általános szerializálókat a WithSerializer és WithSerializerFactory metódusok segítségével, a AddHybridCache hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli a string és a byte[], és minden máshoz System.Text.Json használ. Más szerializálókhoz, például protobufhoz vagy XML-hez is konfigurálható.

A HybridCache API viszonylagos egyszerűségéhez hasonlítsa össze az azt használó kódot a IDistributedCachehasználó kóddal. Íme egy példa a IDistributedCache használatára:

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

Nagy erőfeszítés, hogy minden alkalommal jól sikerüljön, beleértve a szerializálást is. A "gyorsítótár-találati hiba" forgatókönyvben több egyidejű szál is előfordulhat, amelyek mindegyike ilyen hibát kap, mind lekéri a mögöttes adatokat, szerializálja azokat, majd elküldi az adatokat a gyorsítótárnak.

Íme egy egyenértékű kód HybridCachehasználatával:

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

A kód egyszerűbb, és a könyvtár viharvédelmet és más funkciókat biztosít, amelyeket IDistributedCache nem.

Kompatibilitás

A HybridCache kódtár támogatja a régebbi .NET-futtatókörnyezeteket, a .NET-keretrendszer 4.7.2-s és .NET Standard 2.0-s verziójára.

További erőforrások

További információ:

Válasz gyorsítótárazása

A válasz gyorsítótárazási köztes szoftvere:

  • Engedélyezi a kiszolgálói válaszok gyorsítótárazását a HTTP-gyorsítótár fejlécei alapján. Implementálja a szabványos HTTP-gyorsítótárazási szemantikát. A HTTP-gyorsítótár fejlécén alapuló gyorsítótárak, ahogyan a proxyk is teszik.
  • Általában nem előnyös az olyan felhasználói felületi alkalmazások esetében, mint a Razor Pages, mivel a böngészők általában olyan kérésfejléceket állítanak be, amelyek megakadályozzák a gyorsítótárazást. A .NET 7-es vagy újabb verzióiban elérhető kimeneti gyorsítótárazás a felhasználói felületi alkalmazások előnyeit biztosítja. A kimeneti gyorsítótárazással a konfiguráció dönti el, hogy mit kell gyorsítótárazni a HTTP-fejléctől függetlenül.
  • Lehet, hogy hasznos a nyilvános GET- vagy HEAD API-kérésekhez olyan ügyfelek esetében, ahol teljesülnek a gyorsítótárazási feltételek.

A válasz gyorsítótárazásának teszteléséhez használja Fiddlervagy egy másik eszközt, amely explicit módon be tudja állítani a kérésfejléceket. A fejlécek explicit beállítása a gyorsítótárazás teszteléséhez ajánlott. További információkért lásd: Hibaelhárítás.

További információért lásd: Válasz gyorsítótárazása az ASP.NET Core-ban.

Kimeneti gyorsítótárazás

A kimeneti gyorsítótárazási köztes szoftver lehetővé teszi a HTTP-válaszok gyorsítótárazását. A kimeneti gyorsítótárazás a következő módokon különbözik a válasz gyorsítótárazástól.

  • A gyorsítótárazás konfigurálható a kiszolgálón.

    A válasz gyorsítótárazási viselkedését HTTP-fejlécek határozzák meg. Ha például a Chrome-ot vagy az Edge-et tartalmazó webhelyet látogatja meg, a böngésző automatikusan küld egy Cache-control: max-age=0 fejlécet. Ez a fejléc hatékonyan letiltja a válasz gyorsítótárazását, mivel a kiszolgáló az ügyfél által megadott utasításokat követi. A rendszer minden kérésre új választ ad vissza, még akkor is, ha a kiszolgáló friss gyorsítótárazott választ ad vissza. A kimeneti gyorsítótárazással az ügyfél nem bírálja felül a kiszolgálón konfigurált gyorsítótárazási viselkedést.

  • A gyorsítótár tárolási adathordozója bővíthető.

    A rendszer alapértelmezés szerint memóriát használ. A válaszok gyorsítótárazása memóriára van korlátozva.

  • Programozott módon érvénytelenítheti a kijelölt gyorsítótár-bejegyzéseket.

    A válasz gyorsítótárazásának HTTP-fejlécekhez való függősége miatt kevés lehetőség van a gyorsítótár-bejegyzések érvénytelenítésére.

  • Az erőforrás-zárolás csökkenti a gyorsítótár-roham és a dübörgő csorda kockázatát.

    Gyorsítótár-roham akkor fordul elő, ha egy gyakran használt gyorsítótár-bejegyzés érvényét veszti, és túl sok kérés próbálja meg egyszerre újratölteni ugyanazt a gyorsítótár-bejegyzést. Thundering herd jelenség hasonló: rengeteg kérés érkezik ugyanarra a válaszra, amely még nincs a gyorsítótár-bejegyzésben. Az erőforrás-zárolás biztosítja, hogy az adott válaszra vonatkozó összes kérés megvárja az első kérést a gyorsítótár feltöltésére. A válaszok gyorsítótárazása nem rendelkezik erőforrás-zároló funkcióval.

  • A gyorsítótár-újraértékelés minimalizálja a sávszélesség használatát.

    Gyorsítótár-újraértékelés azt jelenti, hogy a kiszolgáló gyorsítótárazott választörzs helyett 304 Not Modified HTTP-állapotkódot tud visszaadni. Ez az állapotkód tájékoztatja az ügyfelet, hogy a kérésre adott válasz nem változik a korábban kapotttól. A válasz gyorsítótárazása nem végez gyorsítótár-újraellenőrzést.

További információ: Kimeneti gyorsítótárazás köztes szoftver a ASP.NET Core.

Cache címke segéd

Az MVC nézet vagy a Razor oldal tartalmát gyorsítótárazza a Cache Tag Helper segítségével. A gyorsítótárcímke-segéd memóriabeli gyorsítótárazással tárolja az adatokat.

További információ: Cache Tag Helper in ASP.NET Core MVC.

Elosztott gyorsítótár-címke segítője

Az MVC-nézetek vagy Razor oldalak tartalmának gyorsítótárazása elosztott felhőalapú vagy webfarm környezetekben az Elosztott gyorsítótár címkés segítő segítségével. Az elosztott gyorsítótárcímke-segéd sql servert, Redisvagy NCache- használ az adatok tárolásához.

További információkért lásd az ASP.NET Core Elosztott gyorsítótár címkéjének segítőjét.

Memóriabeli gyorsítótárazás

A memóriabeli gyorsítótárazás kiszolgálói memóriát használ a gyorsítótárazott adatok tárolásához. Ez a gyorsítótárazási típus alkalmas egyetlen kiszolgálóhoz vagy több kiszolgálóhoz, amelyek munkamenet-affinitást használnak. A munkamenet-affinitást más néven ragadós ülések-nek is nevezik. A munkamenet-affinitás azt jelenti, hogy az ügyféltől érkező kérések mindig ugyanarra a kiszolgálóra vannak irányítva feldolgozás céljából.

További információért lásd: Gyorsítótár a memóriában az ASP.NET Core-ban és Az Azure Application Gateway munkamenet-affinitási problémáinak hibaelhárítása.

Elosztott gyorsítótár

Elosztott gyorsítótár használatával tárolhatja az adatokat, ha az alkalmazást felhőben vagy kiszolgálófarmban üzemeltetik. A gyorsítótár meg van osztva a kéréseket feldolgozó kiszolgálók között. Az ügyfél elküldhet egy kérelmet, amelyet a csoport bármely kiszolgálója kezel, ha az ügyfél gyorsítótárazott adatai elérhetők. ASP.NET Core az SQL Server, Redisés NCache elosztott gyorsítótárakkal működik.

További információért lásd a(z) ASP.NET Core Elosztott gyorsítótárazás .

HybridCache

A HybridCache API áthidal néhány rést a IDistributedCache és IMemoryCache API-kban. HybridCache egy alapértelmezett implementációval rendelkező absztrakt osztály, amely a gyorsítótárba való mentés és a gyorsítótárból való lekérés legtöbb aspektusát kezeli.

Funkciók

HybridCache az alábbi funkciókkal rendelkezik, amelyekkel a többi API nem rendelkezik:

  • Egységes API a folyamaton belüli és kívüli gyorsítótárazáshoz.

    A HybridCache úgy lett kialakítva, hogy a meglévő IDistributedCache és IMemoryCache használat helyettesítésére szolgáljon, és egy egyszerű API-t biztosít az új gyorsítótárazási kód hozzáadásához. Ha az alkalmazás IDistributedCache implementációval rendelkezik, a HybridCache szolgáltatás azt használja az másodlagos gyorsítótárazáshoz. Ez a kétszintű gyorsítótárazási stratégia lehetővé teszi, hogy HybridCache biztosítsa a memóriabeli gyorsítótár sebességét és az elosztott vagy állandó gyorsítótár tartósságát.

  • Stampedevédelem.

    Gyorsítótár-roham akkor fordul elő, ha egy gyakran használt gyorsítótár-bejegyzés érvényét veszti, és túl sok kérés próbálja meg egyszerre újratölteni ugyanazt a gyorsítótár-bejegyzést. HybridCache kombinálja az egyidejű műveleteket, biztosítva, hogy az adott válaszra vonatkozó összes kérés megvárja az első kérést a gyorsítótár feltöltésére.

  • Konfigurálható szerializálás.

    A szerializálás a szolgáltatás regisztrálásának részeként van konfigurálva, és támogatja a típusspecifikus és általános szerializálókat a WithSerializer és WithSerializerFactory metódusok segítségével, a AddHybridCache hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli a string és a byte[], és minden máshoz System.Text.Json használ. Más szerializálókhoz, például protobufhoz vagy XML-hez is konfigurálható.

A HybridCache API viszonylagos egyszerűségéhez hasonlítsa össze az azt használó kódot a IDistributedCachehasználó kóddal. Íme egy példa a IDistributedCache használatára:

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

Nagy erőfeszítés, hogy minden alkalommal jól sikerüljön, beleértve a szerializálást is. A "gyorsítótár-találati hiba" forgatókönyvben több egyidejű szál is előfordulhat, amelyek mindegyike ilyen hibát kap, mind lekéri a mögöttes adatokat, szerializálja azokat, majd elküldi az adatokat a gyorsítótárnak.

Íme egy egyenértékű kód HybridCachehasználatával:

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

A kód egyszerűbb, és a könyvtár viharvédelmet és más funkciókat biztosít, amelyeket IDistributedCache nem.

Kompatibilitás

A HybridCache kódtár támogatja a régebbi .NET-futtatókörnyezeteket, a .NET-keretrendszer 4.7.2-s és .NET Standard 2.0-s verziójára.

További erőforrások

További információ:

Cache címke segéd

Az MVC nézet vagy a Razor oldal tartalmát gyorsítótárazza a Cache Tag Helper segítségével. A gyorsítótárcímke-segéd memóriabeli gyorsítótárazással tárolja az adatokat.

További információ: Cache Tag Helper in ASP.NET Core MVC.

Elosztott gyorsítótár-címke segítője

Az MVC-nézetek vagy Razor oldalak tartalmának gyorsítótárazása elosztott felhőalapú vagy webfarm környezetekben az Elosztott gyorsítótár címkés segítő segítségével. Az elosztott gyorsítótárcímke-segéd sql servert, Redisvagy NCache- használ az adatok tárolásához.

További információkért lásd az ASP.NET Core Elosztott gyorsítótár címkéjének segítőjét.

Válasz gyorsítótárazása

A válasz gyorsítótárazási köztes szoftvere:

  • Engedélyezi a kiszolgálói válaszok gyorsítótárazását a HTTP-gyorsítótár fejlécei alapján. Implementálja a szabványos HTTP-gyorsítótárazási szemantikát. A HTTP-gyorsítótár fejlécén alapuló gyorsítótárak, ahogyan a proxyk is teszik.
  • Általában nem előnyös az olyan felhasználói felületi alkalmazások esetében, mint a Razor Pages, mivel a böngészők általában olyan kérésfejléceket állítanak be, amelyek megakadályozzák a gyorsítótárazást. A .NET 7-es vagy újabb verzióiban elérhető kimeneti gyorsítótárazás a felhasználói felületi alkalmazások előnyeit biztosítja. A kimeneti gyorsítótárazással a konfiguráció dönti el, hogy mit kell gyorsítótárazni a HTTP-fejléctől függetlenül.
  • Lehet, hogy hasznos a nyilvános GET- vagy HEAD API-kérésekhez olyan ügyfelek esetében, ahol teljesülnek a gyorsítótárazási feltételek.

A válasz gyorsítótárazásának teszteléséhez használja Fiddlervagy egy másik eszközt, amely explicit módon be tudja állítani a kérésfejléceket. A fejlécek explicit beállítása a gyorsítótárazás teszteléséhez ajánlott. További információkért lásd: Hibaelhárítás.

Kimeneti gyorsítótárazás

A kimeneti gyorsítótárazási köztes szoftver lehetővé teszi a HTTP-válaszok gyorsítótárazását. A kimeneti gyorsítótárazás a következő módokon különbözik a válasz gyorsítótárazástól.

  • A gyorsítótárazás konfigurálható a kiszolgálón.

    A válasz gyorsítótárazási viselkedését HTTP-fejlécek határozzák meg. Ha például a Chrome-ot vagy az Edge-et tartalmazó webhelyet látogatja meg, a böngésző automatikusan küld egy Cache-control: max-age=0 fejlécet. Ez a fejléc hatékonyan letiltja a válasz gyorsítótárazását, mivel a kiszolgáló az ügyfél által megadott utasításokat követi. A rendszer minden kérésre új választ ad vissza, még akkor is, ha a kiszolgáló friss gyorsítótárazott választ ad vissza. A kimeneti gyorsítótárazással az ügyfél nem bírálja felül a kiszolgálón konfigurált gyorsítótárazási viselkedést.

  • A gyorsítótár tárolási adathordozója bővíthető.

    A rendszer alapértelmezés szerint memóriát használ. A válaszok gyorsítótárazása memóriára van korlátozva.

  • Programozott módon érvénytelenítheti a kijelölt gyorsítótár-bejegyzéseket.

    A válasz gyorsítótárazásának HTTP-fejlécekhez való függősége miatt kevés lehetőség van a gyorsítótár-bejegyzések érvénytelenítésére.

  • Az erőforrás-zárolás csökkenti a gyorsítótár-roham és a dübörgő csorda kockázatát.

    Gyorsítótár-roham akkor fordul elő, ha egy gyakran használt gyorsítótár-bejegyzés érvényét veszti, és túl sok kérés próbálja meg egyszerre újratölteni ugyanazt a gyorsítótár-bejegyzést. Thundering herd jelenség hasonló: rengeteg kérés érkezik ugyanarra a válaszra, amely még nincs a gyorsítótár-bejegyzésben. Az erőforrás-zárolás biztosítja, hogy az adott válaszra vonatkozó összes kérés megvárja az első kérést a gyorsítótár feltöltésére. A válaszok gyorsítótárazása nem rendelkezik erőforrás-zároló funkcióval.

  • A gyorsítótár-újraértékelés minimalizálja a sávszélesség használatát.

    Gyorsítótár-újraértékelés azt jelenti, hogy a kiszolgáló gyorsítótárazott választörzs helyett 304 Not Modified HTTP-állapotkódot tud visszaadni. Ez az állapotkód tájékoztatja az ügyfelet, hogy a kérésre adott válasz nem változik a korábban kapotttól. A válasz gyorsítótárazása nem végez gyorsítótár-újraellenőrzést.

Memóriabeli gyorsítótárazás

A memóriabeli gyorsítótárazás kiszolgálói memóriát használ a gyorsítótárazott adatok tárolásához. Ez a gyorsítótárazási típus alkalmas egyetlen kiszolgálóhoz vagy több kiszolgálóhoz, amelyek munkamenet-affinitást használnak. A munkamenet-affinitást más néven ragadós ülések-nek is nevezik. A munkamenet-affinitás azt jelenti, hogy az ügyféltől érkező kérések mindig ugyanarra a kiszolgálóra vannak irányítva feldolgozás céljából.

További információért lásd: Gyorsítótár a memóriában az ASP.NET Core-ban és Az Azure Application Gateway munkamenet-affinitási problémáinak hibaelhárítása.

Elosztott gyorsítótár

Elosztott gyorsítótár használatával tárolhatja az adatokat, ha az alkalmazást felhőben vagy kiszolgálófarmban üzemeltetik. A gyorsítótár meg van osztva a kéréseket feldolgozó kiszolgálók között. Az ügyfél elküldhet egy kérelmet, amelyet a csoport bármely kiszolgálója kezel, ha az ügyfél gyorsítótárazott adatai elérhetők. ASP.NET Core az SQL Server, Redisés NCache elosztott gyorsítótárakkal működik.

További információért lásd a(z) ASP.NET Core Elosztott gyorsítótárazás .

HybridCache

A HybridCache API áthidal néhány rést a IDistributedCache és IMemoryCache API-kban. HybridCache egy alapértelmezett implementációval rendelkező absztrakt osztály, amely a gyorsítótárba való mentés és a gyorsítótárból való lekérés legtöbb aspektusát kezeli.

Funkciók

HybridCache az alábbi funkciókkal rendelkezik, amelyekkel a többi API nem rendelkezik:

  • Egységes API a folyamaton belüli és kívüli gyorsítótárazáshoz.

    A HybridCache úgy lett kialakítva, hogy a meglévő IDistributedCache és IMemoryCache használat helyettesítésére szolgáljon, és egy egyszerű API-t biztosít az új gyorsítótárazási kód hozzáadásához. Ha az alkalmazás IDistributedCache implementációval rendelkezik, a HybridCache szolgáltatás azt használja az másodlagos gyorsítótárazáshoz. Ez a kétszintű gyorsítótárazási stratégia lehetővé teszi, hogy HybridCache biztosítsa a memóriabeli gyorsítótár sebességét és az elosztott vagy állandó gyorsítótár tartósságát.

  • Stampedevédelem.

    Gyorsítótár-roham akkor fordul elő, ha egy gyakran használt gyorsítótár-bejegyzés érvényét veszti, és túl sok kérés próbálja meg egyszerre újratölteni ugyanazt a gyorsítótár-bejegyzést. HybridCache kombinálja az egyidejű műveleteket, biztosítva, hogy az adott válaszra vonatkozó összes kérés megvárja az első kérést a gyorsítótár feltöltésére.

  • Konfigurálható szerializálás.

    A szerializálás a szolgáltatás regisztrálásának részeként van konfigurálva, és támogatja a típusspecifikus és általános szerializálókat a WithSerializer és WithSerializerFactory metódusok segítségével, a AddHybridCache hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli a string és a byte[], és minden máshoz System.Text.Json használ. Más szerializálókhoz, például protobufhoz vagy XML-hez is konfigurálható.

A HybridCache API viszonylagos egyszerűségéhez hasonlítsa össze az azt használó kódot a IDistributedCachehasználó kóddal. Íme egy példa a IDistributedCache használatára:

public class SomeService(IDistributedCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        var key = $"someinfo:{name}:{id}"; // Unique key for this combination.
        var bytes = await cache.GetAsync(key, token); // Try to get from cache.
        SomeInformation info;
        if (bytes is null)
        {
            // Cache miss; get the data from the real source.
            info = await SomeExpensiveOperationAsync(name, id, token);

            // Serialize and cache it.
            bytes = SomeSerializer.Serialize(info);
            await cache.SetAsync(key, bytes, token);
        }
        else
        {
            // Cache hit; deserialize it.
            info = SomeSerializer.Deserialize<SomeInformation>(bytes);
        }
        return info;
    }

    // This is the work we're trying to cache.
    private async Task<SomeInformation> SomeExpensiveOperationAsync(string name, int id,
        CancellationToken token = default)
    { /* ... */ }
}

Nagy erőfeszítés, hogy minden alkalommal jól sikerüljön, beleértve a szerializálást is. A "gyorsítótár-találati hiba" forgatókönyvben több egyidejű szál is előfordulhat, amelyek mindegyike ilyen hibát kap, mind lekéri a mögöttes adatokat, szerializálja azokat, majd elküldi az adatokat a gyorsítótárnak.

Íme egy egyenértékű kód HybridCachehasználatával:

public class SomeService(HybridCache cache)
{
    public async Task<SomeInformation> GetSomeInformationAsync
        (string name, int id, CancellationToken token = default)
    {
        return await cache.GetOrCreateAsync(
            $"someinfo:{name}:{id}", // Unique key for this entry.
            async cancel => await SomeExpensiveOperationAsync(name, id, cancel),
            token: token
        );
    }
}

A kód egyszerűbb, és a könyvtár viharvédelmet és más funkciókat biztosít, amelyeket IDistributedCache nem.

Kompatibilitás

A HybridCache kódtár támogatja a régebbi .NET-futtatókörnyezeteket, a .NET-keretrendszer 4.7.2-s és .NET Standard 2.0-s verziójára.

További erőforrások

További információ:

Cache címke segéd

Az MVC nézet vagy a Razor oldal tartalmát gyorsítótárazza a Cache Tag Helper segítségével. A gyorsítótárcímke-segéd memóriabeli gyorsítótárazással tárolja az adatokat.

További információ: Cache Tag Helper in ASP.NET Core MVC.

Elosztott gyorsítótár-címke segítője

Az MVC-nézetek vagy Razor oldalak tartalmának gyorsítótárazása elosztott felhőalapú vagy webfarm környezetekben az Elosztott gyorsítótár címkés segítő segítségével. Az elosztott gyorsítótárcímke-segéd sql servert, Redisvagy NCache- használ az adatok tárolásához.

További információkért lásd az ASP.NET Core Elosztott gyorsítótár címkéjének segítőjét.

Válasz gyorsítótárazása

A válasz gyorsítótárazási köztes szoftvere:

  • Engedélyezi a kiszolgálói válaszok gyorsítótárazását a HTTP-gyorsítótár fejlécei alapján. Implementálja a szabványos HTTP-gyorsítótárazási szemantikát. A HTTP-gyorsítótár fejlécén alapuló gyorsítótárak, ahogyan a proxyk is teszik.
  • Általában nem előnyös az olyan felhasználói felületi alkalmazások esetében, mint a Razor Pages, mivel a böngészők általában olyan kérésfejléceket állítanak be, amelyek megakadályozzák a gyorsítótárazást. A .NET 7-es vagy újabb verzióiban elérhető kimeneti gyorsítótárazás a felhasználói felületi alkalmazások előnyeit biztosítja. A kimeneti gyorsítótárazással a konfiguráció dönti el, hogy mit kell gyorsítótárazni a HTTP-fejléctől függetlenül.
  • Lehet, hogy hasznos a nyilvános GET- vagy HEAD API-kérésekhez olyan ügyfelek esetében, ahol teljesülnek a gyorsítótárazási feltételek.

A válasz gyorsítótárazásának teszteléséhez használja Fiddlervagy egy másik eszközt, amely explicit módon be tudja állítani a kérésfejléceket. A fejlécek explicit beállítása a gyorsítótárazás teszteléséhez ajánlott. További információkért lásd: Hibaelhárítás.

Kimeneti gyorsítótárazás

A kimeneti gyorsítótárazás a .NET 7-ben vagy újabb verzióiban érhető el.