Omówienie buforowania w programie ASP.NET Core
Uwaga
Nie jest to najnowsza wersja tego artykułu. Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Ostrzeżenie
Ta wersja ASP.NET Core nie jest już obsługiwana. Aby uzyskać więcej informacji, zobacz .NET i .NET Core Support Policy (Zasady obsługi platformy .NET Core). Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Ważne
Te informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany, zanim zostanie wydany komercyjnie. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Aby zapoznać się z bieżącą wersją, zapoznaj się z wersją tego artykułu platformy .NET 8.
Autor : Rick Anderson i Tom Dykstra
Buforowanie w pamięci
Buforowanie w pamięci używa pamięci serwera do przechowywania buforowanych danych. Ten typ buforowania jest odpowiedni dla jednego serwera lub wielu serwerów przy użyciu koligacji sesji. Koligacja sesji jest również znana jako sesje sticky. Koligacja sesji oznacza, że żądania od klienta są zawsze kierowane do tego samego serwera do przetwarzania.
Aby uzyskać więcej informacji, zobacz Buforowanie w pamięci w programie ASP.NET Core i Rozwiązywanie problemów z koligacją sesji bramy aplikacja systemu Azure.
Rozproszona pamięć podręczna
Użyj rozproszonej pamięci podręcznej do przechowywania danych, gdy aplikacja jest hostowana w farmie serwerów lub w chmurze. Pamięć podręczna jest współdzielona na serwerach, które przetwarzają żądania. Klient może przesłać żądanie obsługiwane przez dowolny serwer w grupie, jeśli dane buforowane dla klienta są dostępne. ASP.NET Core współpracuje z rozproszonymi pamięciami podręcznymi sql Server, Redis i NCache .
Aby uzyskać więcej informacji, zobacz Buforowanie rozproszone w usłudze ASP.NET Core.
Hybrydowa usługaCache
Interfejs HybridCache
API łączy pewne luki w interfejsach IDistributedCache API i IMemoryCache . HybridCache
jest abstrakcyjną klasą z domyślną implementacją, która obsługuje większość aspektów zapisywania w pamięci podręcznej i pobierania z pamięci podręcznej.
Funkcje
HybridCache
ma następujące funkcje, których nie mają inne interfejsy API:
Ujednolicony interfejs API zarówno w przypadku buforowania procesowego, jak i poza procesem.
HybridCache
jest przeznaczony do zastąpienia upuszczania dla istniejącychIDistributedCache
iIMemoryCache
użycia, a także udostępnia prosty interfejs API do dodawania nowego kodu buforowania. Jeśli aplikacja ma implementacjęIDistributedCache
,HybridCache
usługa używa jej do buforowania pomocniczego. Ta dwuwymiarowa strategia buforowania umożliwiaHybridCache
zapewnienie szybkości pamięci podręcznej w pamięci oraz trwałości rozproszonej lub trwałej pamięci podręcznej.Ochrona stampede.
Sygnatura pamięci podręcznej występuje, gdy często używany wpis pamięci podręcznej jest odwoływane, a zbyt wiele żądań próbuje ponownie wypełniać ten sam wpis pamięci podręcznej w tym samym czasie.
HybridCache
łączy operacje współbieżne, zapewniając, że wszystkie żądania dla danej odpowiedzi oczekują na pierwsze żądanie wypełnienia pamięci podręcznej.Konfigurowalna serializacji.
Serializacja jest konfigurowana w ramach rejestrowania usługi z obsługą serializatorów specyficznych dla typu i uogólnionych za pośrednictwem
WithSerializer
metod iWithSerializerFactory
, w łańcuchu od wywołaniaAddHybridCache
. Domyślnie usługa obsługujestring
ibyte[]
wewnętrznie używaSystem.Text.Json
wszystkich innych elementów. Można go skonfigurować dla innych typów serializatorów, takich jak protobuf lub XML.
Aby zobaczyć względną prostotę interfejsu HybridCache
API, porównaj kod, który używa go do kodu używającego metody IDistributedCache
. Oto przykład użycia IDistributedCache
:
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)
{ /* ... */ }
}
To dużo pracy, aby uzyskać rację za każdym razem, w tym takie rzeczy jak serializacja. W scenariuszu "chybienia pamięci podręcznej" można znaleźć wiele współbieżnych wątków, wszystkie chybienie pamięci podręcznej, wszystkie pobieranie danych bazowych, wszystkie serializowanie ich i wysyłanie tych danych do pamięci podręcznej.
Oto równoważny kod przy użyciu polecenia HybridCache
:
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
);
}
}
Kod jest prostszy, a biblioteka zapewnia ochronę stampede i inne funkcje, które IDistributedCache
nie.
Zgodność
Biblioteka HybridCache
obsługuje starsze środowiska uruchomieniowe platformy .NET w dół do programów .NET Framework 4.7.2 i .NET Standard 2.0.
Dodatkowe zasoby
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Biblioteka hybridCache w programie ASP.NET Core
- Problem z usługą GitHub dotnet/aspnetcore #54647
HybridCache
kod źródłowy
Buforowanie odpowiedzi
Oprogramowanie pośredniczące buforowania odpowiedzi:
- Włącza buforowanie odpowiedzi serwera na podstawie nagłówków pamięci podręcznej HTTP. Implementuje standardową semantykę buforowania HTTP. Pamięci podręczne oparte na nagłówkach pamięci podręcznej HTTP, takich jak serwery proxy.
- Zazwyczaj nie jest korzystne dla aplikacji interfejsu użytkownika, takich jak Razor Strony, ponieważ przeglądarki zwykle ustawiają nagłówki żądań, które uniemożliwiają buforowanie. Buforowanie danych wyjściowych, które jest dostępne w programie ASP.NET Core 7.0 lub nowszym, zapewnia korzyści aplikacjom interfejsu użytkownika. W przypadku buforowania danych wyjściowych konfiguracja decyduje, co powinno być buforowane niezależnie od nagłówków HTTP.
- Może być korzystne w przypadku publicznych żądań GET lub HEAD API od klientów, na których spełnione są warunki buforowania .
Aby przetestować buforowanie odpowiedzi, użyj programu Fiddler lub innego narzędzia, które może jawnie ustawić nagłówki żądań. Jawne ustawianie nagłówków jest preferowane do testowania buforowania. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów.
Aby uzyskać więcej informacji, zobacz Buforowanie odpowiedzi w programie ASP.NET Core.
Buforowanie danych wyjściowych
Oprogramowanie pośredniczące buforowania danych wyjściowych umożliwia buforowanie odpowiedzi HTTP. Buforowanie danych wyjściowych różni się od buforowania odpowiedzi na następujące sposoby:
Zachowanie buforowania można skonfigurować na serwerze.
Zachowanie buforowania odpowiedzi jest definiowane przez nagłówki HTTP. Na przykład podczas odwiedzania witryny internetowej w przeglądarce Chrome lub Edge przeglądarka automatycznie wysyła
Cache-control: max-age=0
nagłówek. Ten nagłówek skutecznie wyłącza buforowanie odpowiedzi, ponieważ serwer jest zgodny z instrukcjami dostarczonymi przez klienta. Dla każdego żądania jest zwracana nowa odpowiedź, nawet jeśli serwer ma nową odpowiedź w pamięci podręcznej. W przypadku buforowania danych wyjściowych klient nie zastępuje zachowania buforowania skonfigurowanego na serwerze.Nośnik magazynu pamięci podręcznej jest rozszerzalny.
Pamięć jest używana domyślnie. Buforowanie odpowiedzi jest ograniczone do pamięci.
Można programowo unieważnić wybrane wpisy pamięci podręcznej.
Zależność buforowania odpowiedzi od nagłówków HTTP pozostawia kilka opcji unieważniania wpisów pamięci podręcznej.
Blokowanie zasobów zmniejsza ryzyko stemplowania pamięci podręcznej i grzmiące stada.
Sygnatura pamięci podręcznej występuje, gdy często używany wpis pamięci podręcznej jest odwoływane, a zbyt wiele żądań próbuje ponownie wypełniać ten sam wpis pamięci podręcznej w tym samym czasie. Stado thundering jest podobne: wybuch żądań dla tej samej odpowiedzi, która nie znajduje się jeszcze w wpisie pamięci podręcznej. Blokowanie zasobów gwarantuje, że wszystkie żądania dla danej odpowiedzi oczekują na pierwsze żądanie wypełnienia pamięci podręcznej. Buforowanie odpowiedzi nie ma funkcji blokowania zasobów.
Zmiana pamięci podręcznej minimalizuje użycie przepustowości.
Zmiana pamięci podręcznej oznacza, że serwer może zwrócić
304 Not Modified
kod stanu HTTP zamiast buforowanej treści odpowiedzi. Ten kod stanu informuje klienta, że odpowiedź na żądanie nie zmienia się od tego, co zostało wcześniej odebrane. Buforowanie odpowiedzi nie powoduje ponownej zmiany pamięci podręcznej.
Aby uzyskać więcej informacji, zobacz Oprogramowanie pośredniczące buforowania danych wyjściowych w programie ASP.NET Core.
Pomocnik tagów pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony za pomocą pomocnika tagów pamięci podręcznej. Pomocnik tagów pamięci podręcznej używa buforowania w pamięci do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Cache Tag Helper in ASP.NET Core MVC (Pomocnik tagów pamięci podręcznej w usłudze ASP.NET Core MVC).
Pomocnik tagów rozproszonej pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony w scenariuszach rozproszonych w chmurze lub farmie internetowej za pomocą pomocnika tagów rozproszonej pamięci podręcznej. Pomocnik tagów rozproszonej pamięci podręcznej używa programu SQL Server, Redis lub NCache do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Distributed Cache Tag Helper in ASP.NET Core (Pomocnik tagów rozproszonej pamięci podręcznej w ASP.NET Core).
Buforowanie w pamięci
Buforowanie w pamięci używa pamięci serwera do przechowywania buforowanych danych. Ten typ buforowania jest odpowiedni dla jednego serwera lub wielu serwerów przy użyciu koligacji sesji. Koligacja sesji jest również znana jako sesje sticky. Koligacja sesji oznacza, że żądania od klienta są zawsze kierowane do tego samego serwera do przetwarzania.
Aby uzyskać więcej informacji, zobacz Buforowanie w pamięci w programie ASP.NET Core i Rozwiązywanie problemów z koligacją sesji bramy aplikacja systemu Azure.
Rozproszona pamięć podręczna
Użyj rozproszonej pamięci podręcznej do przechowywania danych, gdy aplikacja jest hostowana w farmie serwerów lub w chmurze. Pamięć podręczna jest współdzielona na serwerach, które przetwarzają żądania. Klient może przesłać żądanie obsługiwane przez dowolny serwer w grupie, jeśli dane buforowane dla klienta są dostępne. ASP.NET Core współpracuje z rozproszonymi pamięciami podręcznymi sql Server, Redis i NCache .
Aby uzyskać więcej informacji, zobacz Buforowanie rozproszone w usłudze ASP.NET Core.
Hybrydowa usługaCache
Interfejs HybridCache
API łączy pewne luki w interfejsach IDistributedCache API i IMemoryCache . HybridCache
jest abstrakcyjną klasą z domyślną implementacją, która obsługuje większość aspektów zapisywania w pamięci podręcznej i pobierania z pamięci podręcznej.
Funkcje
HybridCache
ma następujące funkcje, których nie mają inne interfejsy API:
Ujednolicony interfejs API zarówno w przypadku buforowania procesowego, jak i poza procesem.
HybridCache
jest przeznaczony do zastąpienia upuszczania dla istniejącychIDistributedCache
iIMemoryCache
użycia, a także udostępnia prosty interfejs API do dodawania nowego kodu buforowania. Jeśli aplikacja ma implementacjęIDistributedCache
,HybridCache
usługa używa jej do buforowania pomocniczego. Ta dwuwymiarowa strategia buforowania umożliwiaHybridCache
zapewnienie szybkości pamięci podręcznej w pamięci oraz trwałości rozproszonej lub trwałej pamięci podręcznej.Ochrona stampede.
Sygnatura pamięci podręcznej występuje, gdy często używany wpis pamięci podręcznej jest odwoływane, a zbyt wiele żądań próbuje ponownie wypełniać ten sam wpis pamięci podręcznej w tym samym czasie.
HybridCache
łączy operacje współbieżne, zapewniając, że wszystkie żądania dla danej odpowiedzi oczekują na pierwsze żądanie wypełnienia pamięci podręcznej.Konfigurowalna serializacji.
Serializacja jest konfigurowana w ramach rejestrowania usługi z obsługą serializatorów specyficznych dla typu i uogólnionych za pośrednictwem
WithSerializer
metod iWithSerializerFactory
, w łańcuchu od wywołaniaAddHybridCache
. Domyślnie usługa obsługujestring
ibyte[]
wewnętrznie używaSystem.Text.Json
wszystkich innych elementów. Można go skonfigurować dla innych typów serializatorów, takich jak protobuf lub XML.
Aby zobaczyć względną prostotę interfejsu HybridCache
API, porównaj kod, który używa go do kodu używającego metody IDistributedCache
. Oto przykład użycia IDistributedCache
:
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)
{ /* ... */ }
}
To dużo pracy, aby uzyskać rację za każdym razem, w tym takie rzeczy jak serializacja. W scenariuszu "chybienia pamięci podręcznej" można znaleźć wiele współbieżnych wątków, wszystkie chybienie pamięci podręcznej, wszystkie pobieranie danych bazowych, wszystkie serializowanie ich i wysyłanie tych danych do pamięci podręcznej.
Oto równoważny kod przy użyciu polecenia HybridCache
:
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
);
}
}
Kod jest prostszy, a biblioteka zapewnia ochronę stampede i inne funkcje, które IDistributedCache
nie.
Zgodność
Biblioteka HybridCache
obsługuje starsze środowiska uruchomieniowe platformy .NET w dół do programów .NET Framework 4.7.2 i .NET Standard 2.0.
Dodatkowe zasoby
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Biblioteka hybridCache w programie ASP.NET Core
- Problem z usługą GitHub dotnet/aspnetcore #54647
HybridCache
kod źródłowy
Pomocnik tagów pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony za pomocą pomocnika tagów pamięci podręcznej. Pomocnik tagów pamięci podręcznej używa buforowania w pamięci do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Cache Tag Helper in ASP.NET Core MVC (Pomocnik tagów pamięci podręcznej w usłudze ASP.NET Core MVC).
Pomocnik tagów rozproszonej pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony w scenariuszach rozproszonych w chmurze lub farmie internetowej za pomocą pomocnika tagów rozproszonej pamięci podręcznej. Pomocnik tagów rozproszonej pamięci podręcznej używa programu SQL Server, Redis lub NCache do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Distributed Cache Tag Helper in ASP.NET Core (Pomocnik tagów rozproszonej pamięci podręcznej w ASP.NET Core).
Buforowanie odpowiedzi
Oprogramowanie pośredniczące buforowania odpowiedzi:
- Włącza buforowanie odpowiedzi serwera na podstawie nagłówków pamięci podręcznej HTTP. Implementuje standardową semantykę buforowania HTTP. Pamięci podręczne oparte na nagłówkach pamięci podręcznej HTTP, takich jak serwery proxy.
- Zazwyczaj nie jest korzystne dla aplikacji interfejsu użytkownika, takich jak Razor Strony, ponieważ przeglądarki zwykle ustawiają nagłówki żądań, które uniemożliwiają buforowanie. Buforowanie danych wyjściowych, które jest dostępne w programie ASP.NET Core 7.0 lub nowszym, zapewnia korzyści aplikacjom interfejsu użytkownika. W przypadku buforowania danych wyjściowych konfiguracja decyduje, co powinno być buforowane niezależnie od nagłówków HTTP.
- Może być korzystne w przypadku publicznych żądań GET lub HEAD API od klientów, na których spełnione są warunki buforowania .
Aby przetestować buforowanie odpowiedzi, użyj programu Fiddler lub innego narzędzia, które może jawnie ustawić nagłówki żądań. Jawne ustawianie nagłówków jest preferowane do testowania buforowania. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów.
Buforowanie danych wyjściowych
Oprogramowanie pośredniczące buforowania danych wyjściowych umożliwia buforowanie odpowiedzi HTTP. Buforowanie danych wyjściowych różni się od buforowania odpowiedzi na następujące sposoby:
Zachowanie buforowania można skonfigurować na serwerze.
Zachowanie buforowania odpowiedzi jest definiowane przez nagłówki HTTP. Na przykład podczas odwiedzania witryny internetowej w przeglądarce Chrome lub Edge przeglądarka automatycznie wysyła
Cache-control: max-age=0
nagłówek. Ten nagłówek skutecznie wyłącza buforowanie odpowiedzi, ponieważ serwer jest zgodny z instrukcjami dostarczonymi przez klienta. Dla każdego żądania jest zwracana nowa odpowiedź, nawet jeśli serwer ma nową odpowiedź w pamięci podręcznej. W przypadku buforowania danych wyjściowych klient nie zastępuje zachowania buforowania skonfigurowanego na serwerze.Nośnik magazynu pamięci podręcznej jest rozszerzalny.
Pamięć jest używana domyślnie. Buforowanie odpowiedzi jest ograniczone do pamięci.
Można programowo unieważnić wybrane wpisy pamięci podręcznej.
Zależność buforowania odpowiedzi od nagłówków HTTP pozostawia kilka opcji unieważniania wpisów pamięci podręcznej.
Blokowanie zasobów zmniejsza ryzyko stemplowania pamięci podręcznej i grzmiące stada.
Sygnatura pamięci podręcznej występuje, gdy często używany wpis pamięci podręcznej jest odwoływane, a zbyt wiele żądań próbuje ponownie wypełniać ten sam wpis pamięci podręcznej w tym samym czasie. Stado thundering jest podobne: wybuch żądań dla tej samej odpowiedzi, która nie znajduje się jeszcze w wpisie pamięci podręcznej. Blokowanie zasobów gwarantuje, że wszystkie żądania dla danej odpowiedzi oczekują na pierwsze żądanie wypełnienia pamięci podręcznej. Buforowanie odpowiedzi nie ma funkcji blokowania zasobów.
Zmiana pamięci podręcznej minimalizuje użycie przepustowości.
Zmiana pamięci podręcznej oznacza, że serwer może zwrócić
304 Not Modified
kod stanu HTTP zamiast buforowanej treści odpowiedzi. Ten kod stanu informuje klienta, że odpowiedź na żądanie nie zmienia się od tego, co zostało wcześniej odebrane. Buforowanie odpowiedzi nie powoduje ponownej zmiany pamięci podręcznej.
Buforowanie w pamięci
Buforowanie w pamięci używa pamięci serwera do przechowywania buforowanych danych. Ten typ buforowania jest odpowiedni dla jednego serwera lub wielu serwerów przy użyciu koligacji sesji. Koligacja sesji jest również znana jako sesje sticky. Koligacja sesji oznacza, że żądania od klienta są zawsze kierowane do tego samego serwera do przetwarzania.
Aby uzyskać więcej informacji, zobacz Buforowanie w pamięci w programie ASP.NET Core i Rozwiązywanie problemów z koligacją sesji bramy aplikacja systemu Azure.
Rozproszona pamięć podręczna
Użyj rozproszonej pamięci podręcznej do przechowywania danych, gdy aplikacja jest hostowana w farmie serwerów lub w chmurze. Pamięć podręczna jest współdzielona na serwerach, które przetwarzają żądania. Klient może przesłać żądanie obsługiwane przez dowolny serwer w grupie, jeśli dane buforowane dla klienta są dostępne. ASP.NET Core współpracuje z rozproszonymi pamięciami podręcznymi sql Server, Redis i NCache .
Aby uzyskać więcej informacji, zobacz Buforowanie rozproszone w usłudze ASP.NET Core.
Hybrydowa usługaCache
Interfejs HybridCache
API łączy pewne luki w interfejsach IDistributedCache API i IMemoryCache . HybridCache
jest abstrakcyjną klasą z domyślną implementacją, która obsługuje większość aspektów zapisywania w pamięci podręcznej i pobierania z pamięci podręcznej.
Funkcje
HybridCache
ma następujące funkcje, których nie mają inne interfejsy API:
Ujednolicony interfejs API zarówno w przypadku buforowania procesowego, jak i poza procesem.
HybridCache
jest przeznaczony do zastąpienia upuszczania dla istniejącychIDistributedCache
iIMemoryCache
użycia, a także udostępnia prosty interfejs API do dodawania nowego kodu buforowania. Jeśli aplikacja ma implementacjęIDistributedCache
,HybridCache
usługa używa jej do buforowania pomocniczego. Ta dwuwymiarowa strategia buforowania umożliwiaHybridCache
zapewnienie szybkości pamięci podręcznej w pamięci oraz trwałości rozproszonej lub trwałej pamięci podręcznej.Ochrona stampede.
Sygnatura pamięci podręcznej występuje, gdy często używany wpis pamięci podręcznej jest odwoływane, a zbyt wiele żądań próbuje ponownie wypełniać ten sam wpis pamięci podręcznej w tym samym czasie.
HybridCache
łączy operacje współbieżne, zapewniając, że wszystkie żądania dla danej odpowiedzi oczekują na pierwsze żądanie wypełnienia pamięci podręcznej.Konfigurowalna serializacji.
Serializacja jest konfigurowana w ramach rejestrowania usługi z obsługą serializatorów specyficznych dla typu i uogólnionych za pośrednictwem
WithSerializer
metod iWithSerializerFactory
, w łańcuchu od wywołaniaAddHybridCache
. Domyślnie usługa obsługujestring
ibyte[]
wewnętrznie używaSystem.Text.Json
wszystkich innych elementów. Można go skonfigurować dla innych typów serializatorów, takich jak protobuf lub XML.
Aby zobaczyć względną prostotę interfejsu HybridCache
API, porównaj kod, który używa go do kodu używającego metody IDistributedCache
. Oto przykład użycia IDistributedCache
:
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)
{ /* ... */ }
}
To dużo pracy, aby uzyskać rację za każdym razem, w tym takie rzeczy jak serializacja. W scenariuszu "chybienia pamięci podręcznej" można znaleźć wiele współbieżnych wątków, wszystkie chybienie pamięci podręcznej, wszystkie pobieranie danych bazowych, wszystkie serializowanie ich i wysyłanie tych danych do pamięci podręcznej.
Oto równoważny kod przy użyciu polecenia HybridCache
:
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
);
}
}
Kod jest prostszy, a biblioteka zapewnia ochronę stampede i inne funkcje, które IDistributedCache
nie.
Zgodność
Biblioteka HybridCache
obsługuje starsze środowiska uruchomieniowe platformy .NET w dół do programów .NET Framework 4.7.2 i .NET Standard 2.0.
Dodatkowe zasoby
Aby uzyskać więcej informacji, zobacz następujące zasoby:
- Biblioteka hybridCache w programie ASP.NET Core
- Problem z usługą GitHub dotnet/aspnetcore #54647
HybridCache
kod źródłowy
Pomocnik tagów pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony za pomocą pomocnika tagów pamięci podręcznej. Pomocnik tagów pamięci podręcznej używa buforowania w pamięci do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Cache Tag Helper in ASP.NET Core MVC (Pomocnik tagów pamięci podręcznej w usłudze ASP.NET Core MVC).
Pomocnik tagów rozproszonej pamięci podręcznej
Buforuj zawartość z widoku MVC lub Razor strony w scenariuszach rozproszonych w chmurze lub farmie internetowej za pomocą pomocnika tagów rozproszonej pamięci podręcznej. Pomocnik tagów rozproszonej pamięci podręcznej używa programu SQL Server, Redis lub NCache do przechowywania danych.
Aby uzyskać więcej informacji, zobacz Distributed Cache Tag Helper in ASP.NET Core (Pomocnik tagów rozproszonej pamięci podręcznej w ASP.NET Core).
Buforowanie odpowiedzi
Oprogramowanie pośredniczące buforowania odpowiedzi:
- Włącza buforowanie odpowiedzi serwera na podstawie nagłówków pamięci podręcznej HTTP. Implementuje standardową semantykę buforowania HTTP. Pamięci podręczne oparte na nagłówkach pamięci podręcznej HTTP, takich jak serwery proxy.
- Zazwyczaj nie jest korzystne dla aplikacji interfejsu użytkownika, takich jak Razor Strony, ponieważ przeglądarki zwykle ustawiają nagłówki żądań, które uniemożliwiają buforowanie. Buforowanie danych wyjściowych, które jest dostępne w programie ASP.NET Core 7.0 lub nowszym, zapewnia korzyści aplikacjom interfejsu użytkownika. W przypadku buforowania danych wyjściowych konfiguracja decyduje, co powinno być buforowane niezależnie od nagłówków HTTP.
- Może być korzystne w przypadku publicznych żądań GET lub HEAD API od klientów, na których spełnione są warunki buforowania .
Aby przetestować buforowanie odpowiedzi, użyj programu Fiddler lub innego narzędzia, które może jawnie ustawić nagłówki żądań. Jawne ustawianie nagłówków jest preferowane do testowania buforowania. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów.
Buforowanie danych wyjściowych
Buforowanie danych wyjściowych jest dostępne na platformie .NET 7 lub nowszym.