Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
ésIMemoryCache
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ásIDistributedCache
implementációval rendelkezik, aHybridCache
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, hogyHybridCache
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
ésWithSerializerFactory
metódusok segítségével, aAddHybridCache
hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli astring
és abyte[]
, és minden máshozSystem.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 IDistributedCache
haszná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 HybridCache
haszná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ó:
- HybridCache könyvtár az ASP.NET Core
-
Hybrid Cache API-javaslat (
dotnet/aspnetcore
#54647) -
HybridCache
forráskód
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
ésIMemoryCache
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ásIDistributedCache
implementációval rendelkezik, aHybridCache
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, hogyHybridCache
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
ésWithSerializerFactory
metódusok segítségével, aAddHybridCache
hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli astring
és abyte[]
, és minden máshozSystem.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 IDistributedCache
haszná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 HybridCache
haszná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ó:
- HybridCache könyvtár az ASP.NET Core
-
Hybrid Cache API-javaslat (
dotnet/aspnetcore
#54647) -
HybridCache
forráskód
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
ésIMemoryCache
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ásIDistributedCache
implementációval rendelkezik, aHybridCache
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, hogyHybridCache
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
ésWithSerializerFactory
metódusok segítségével, aAddHybridCache
hívástól láncolt módon. A szolgáltatás alapértelmezés szerint belsőleg kezeli astring
és abyte[]
, és minden máshozSystem.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 IDistributedCache
haszná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 HybridCache
haszná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ó:
- HybridCache könyvtár az ASP.NET Core
-
Hybrid Cache API-javaslat (
dotnet/aspnetcore
#54647) -
HybridCache
forráskód
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.