ASP.NET Core'da önbelleğe almaya genel bakış
Uyarı
ASP.NET Core'un bu sürümü artık desteklenmiyor. Daha fazla bilgi için bkz . .NET ve .NET Core Destek İlkesi. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.
Tarafından Rick Anderson ve Tom Dykstra
Bellek içi önbellek
Bellek içi önbelleğe alma, önbelleğe alınmış verileri depolamak için sunucu belleğini kullanır. Bu önbelleğe alma türü, oturum benzimi kullanan tek bir sunucu veya birden çok sunucu için uygundur. Oturum benzitesi, yapışkan oturumlar olarak da bilinir. Oturum benzimi, bir istemciden gelen isteklerin her zaman işlenmek üzere aynı sunucuya yönlendirildiğini gösterir.
Daha fazla bilgi için bkz. ASP.NET Core'da bellek içi önbelleğe alma ve Azure Uygulaması lication Gateway oturum benşimi sorunlarını giderme.
Dağıtılmış Önbellek
Uygulama bir bulutta veya sunucu grubunda barındırıldığında verileri depolamak için dağıtılmış önbellek kullanın. Önbellek, istekleri işleyen sunucular arasında paylaşılır. İstemci için önbelleğe alınmış veriler varsa, istemci gruptaki herhangi bir sunucu tarafından işlenen bir istek gönderebilir. ASP.NET Core, SQL Server, Redis ve NCache dağıtılmış önbellekleriyle çalışır.
Daha fazla bilgi için bkz . ASP.NET Core'da dağıtılmış önbelleğe alma.
HybridCache
API, HybridCache
ve IMemoryCache API'lerinde IDistributedCache bazı boşlukları köprüler. HybridCache
, önbelleğe kaydetme ve önbellekten alma işlemlerinin çoğu yönünü işleyen varsayılan bir uygulamaya sahip soyut bir sınıftır.
Özellikler
HybridCache
diğer API'lerin sahip olmadığı aşağıdaki özelliklere sahiptir:
Hem işlem içi hem de işlem dışı önbelleğe alma için birleşik bir API.
HybridCache
var olanIDistributedCache
veIMemoryCache
kullanım için açılan bir yerine geçecek şekilde tasarlanmıştır ve yeni önbelleğe alma kodu eklemek için basit bir API sağlar. Uygulamanın birIDistributedCache
uygulaması varsa,HybridCache
hizmet bunu ikincil önbelleğe alma için kullanır. Bu iki düzeyli önbelleğe alma stratejisi, bellek içi önbelleğin hızını ve dağıtılmış veya kalıcı önbelleğin dayanıklılığını sağlarHybridCache
.Damgalı koruma.
Sık kullanılan bir önbellek girdisi iptal edildiğinde ve çok fazla istek aynı önbellek girdisini aynı anda yeniden doldurmaya çalıştığında önbellek damgalama işlemi gerçekleşir.
HybridCache
eşzamanlı işlemleri birleştirerek belirli bir yanıta yönelik tüm isteklerin önbelleği doldurmak için ilk isteği beklemesini sağlar.Yapılandırılabilir serileştirme.
Serileştirme, çağrıdan zincirlenmiş ve
WithSerializerFactory
yöntemleri aracılığıylaWithSerializer
türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmeninAddHybridCache
bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işlerstring
byte[]
ve kullanırSystem.Text.Json
. Protobuf veya XML gibi diğer serileştirici türleri için yapılandırılabilir.
API'nin HybridCache
göreli basitliğini görmek için bunu kullanan kodu kullanan IDistributedCache
kodla karşılaştırın. Kullanımın nasıl IDistributedCache
göründüğüne bir örnek aşağıda verilmişti:
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)
{ /* ... */ }
}
Serileştirme gibi şeyler de dahil olmak üzere her seferinde doğru olanı yapmak için çok fazla çalışma gerekir. "Önbellek kaçamak" senaryosunda birden çok eşzamanlı iş parçacığıyla karşılaşabilir, hepsi önbellek kaçırabilir, tüm temel alınan verileri getirebilir, hepsini seri hale getirebilir ve bu verileri önbelleğe gönderebilirsiniz.
şu kodu kullanarak eşdeğer bir kod bulabilirsiniz 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 daha basittir ve kitaplık damgalı koruma ve olmayan diğer özellikler IDistributedCache
sağlar.
Uyumluluk
Kitaplık HybridCache
, .NET Framework 4.7.2 ve .NET Standard 2.0'a kadar eski .NET çalışma zamanlarını destekler.
Ek kaynaklar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
- ASP.NET Core'da HybridCache kitaplığı
- GitHub sorunu dotnet/aspnetcore #54647
HybridCache
kaynak kodu
Yanıtları Önbelleğe Alma
Yanıt önbelleğe alma ara yazılımı:
- HTTP önbellek üst bilgilerine göre sunucu yanıtlarını önbelleğe almayı etkinleştirir. Standart HTTP önbelleğe alma semantiğini uygular. Ara sunucular gibi HTTP önbellek üst bilgilerini temel alan önbellekler.
- Tarayıcılar genellikle önbelleğe almayı engelleyen istek üst bilgilerini ayarladığından, Sayfalar gibi Razor kullanıcı arabirimi uygulamaları için genellikle yararlı olmaz. ASP.NET Core 7.0 ve sonraki sürümlerde kullanılabilen çıktı önbelleğe alma, kullanıcı arabirimi uygulamalarından yararlanır. Çıkış önbelleğe alma ile yapılandırma, HTTP üst bilgilerinden bağımsız olarak nelerin önbelleğe alınması gerektiğine karar verir.
- Önbelleğe alma koşullarının karşılandığı istemcilerden gelen genel GET veya HEAD API istekleri için yararlı olabilir.
Yanıt önbelleğe almayı test etmek için Fiddler'ı veya istek üst bilgilerini açıkça ayarlayabilen başka bir aracı kullanın. Üst bilgileri açıkça ayarlamak, önbelleğe alma testi için tercih edilir. Daha fazla bilgi için bkz. Sorun giderme.
Daha fazla bilgi için bkz . ASP.NET Core'da yanıt önbelleğe alma.
Çıkış önbelleği
Çıkış önbelleğe alma ara yazılımı, HTTP yanıtlarının önbelleğe alınmasını sağlar. Çıktı önbelleğe alma, yanıt önbelleğe almadan aşağıdaki yollarla farklıdır:
Önbelleğe alma davranışı sunucuda yapılandırılabilir.
Yanıt önbelleğe alma davranışı HTTP üst bilgileri tarafından tanımlanır. Örneğin, Chrome veya Edge ile bir web sitesini ziyaret ettiğinizde tarayıcı otomatik olarak bir
Cache-control: max-age=0
üst bilgi gönderir. Bu üst bilgi, sunucu istemci tarafından sağlanan yönergeleri izlediğinden yanıt önbelleğe almayı etkin bir şekilde devre dışı bırakır. Sunucuda yeni bir önbelleğe alınmış yanıt olsa bile her istek için yeni bir yanıt döndürülür. Çıkış önbelleğe alma işlemiyle istemci, sunucuda yapılandırdığınız önbelleğe alma davranışını geçersiz kılmaz.Önbellek depolama ortamı genişletilebilir.
Bellek varsayılan olarak kullanılır. Yanıt önbelleğe alma işlemi bellekle sınırlıdır.
Seçili önbellek girdilerini program aracılığıyla geçersiz kılabilirsiniz.
Yanıt önbelleğe alma işleminin HTTP üst bilgilerine bağımlılığı, önbellek girdilerini geçersiz hale getirmeniz için birkaç seçenek sunar.
Kaynak kilitleme, önbellek damgalama ve sürüde gök gürültüsü oluşturma riskini azaltır.
Sık kullanılan bir önbellek girdisi iptal edildiğinde ve çok fazla istek aynı önbellek girdisini aynı anda yeniden doldurmaya çalıştığında önbellek damgalama işlemi gerçekleşir. Gök gürültüsü sürü benzerdir: önbellek girişinde olmayan aynı yanıt için istekler dizisi. Kaynak kilitleme, belirli bir yanıta yönelik tüm isteklerin önbelleği doldurmak için ilk isteği beklemesini sağlar. Yanıt önbelleğe alma işleminin kaynak kilitleme özelliği yoktur.
Önbellek yeniden doğrulama bant genişliği kullanımını en aza indirir.
Önbellek yeniden doğrulama , sunucunun önbelleğe alınmış yanıt gövdesi yerine http
304 Not Modified
durum kodu döndürebileceği anlamına gelir. Bu durum kodu, istemciye isteğin yanıtının daha önce alınan yanıttan değişmediğini bildirir. Yanıt önbelleğe alma, önbellek yeniden doğrulama gerçekleştirmez.
Daha fazla bilgi için bkz . ASP.NET Core'da çıktı önbelleğe alma ara yazılımı.
Önbellek Etiketi Yardımcısı
İçeriği, Önbellek Etiketi Yardımcısı ile bir MVC görünümünden veya Razor Sayfasından önbelleğe alın. Önbellek Etiketi Yardımcısı, verileri depolamak için bellek içi önbelleğe alma kullanır.
Daha fazla bilgi için bkz . ASP.NET Core MVC'de Önbellek Etiketi Yardımcısı.
Dağıtılmış Önbellek Etiketi Yardımcısı
Dağıtılmış Önbellek Etiketi Yardımcısı ile dağıtılmış bulut veya Razor web grubu senaryolarındaki bir MVC görünümünden veya Sayfasından içeriği önbelleğe alın. Dağıtılmış Önbellek Etiketi Yardımcısı, verileri depolamak için SQL Server, Redis veya NCache kullanır.
Daha fazla bilgi için bkz . ASP.NET Core'da Dağıtılmış Önbellek Etiketi Yardımcısı.
Bellek içi önbellek
Bellek içi önbelleğe alma, önbelleğe alınmış verileri depolamak için sunucu belleğini kullanır. Bu önbelleğe alma türü, oturum benzimi kullanan tek bir sunucu veya birden çok sunucu için uygundur. Oturum benzitesi, yapışkan oturumlar olarak da bilinir. Oturum benzimi, bir istemciden gelen isteklerin her zaman işlenmek üzere aynı sunucuya yönlendirildiğini gösterir.
Daha fazla bilgi için bkz. ASP.NET Core'da bellek içi önbelleğe alma ve Azure Uygulaması lication Gateway oturum benşimi sorunlarını giderme.
Dağıtılmış Önbellek
Uygulama bir bulutta veya sunucu grubunda barındırıldığında verileri depolamak için dağıtılmış önbellek kullanın. Önbellek, istekleri işleyen sunucular arasında paylaşılır. İstemci için önbelleğe alınmış veriler varsa, istemci gruptaki herhangi bir sunucu tarafından işlenen bir istek gönderebilir. ASP.NET Core, SQL Server, Redis ve NCache dağıtılmış önbellekleriyle çalışır.
Daha fazla bilgi için bkz . ASP.NET Core'da dağıtılmış önbelleğe alma.
HybridCache
API, HybridCache
ve IMemoryCache API'lerinde IDistributedCache bazı boşlukları köprüler. HybridCache
, önbelleğe kaydetme ve önbellekten alma işlemlerinin çoğu yönünü işleyen varsayılan bir uygulamaya sahip soyut bir sınıftır.
Özellikler
HybridCache
diğer API'lerin sahip olmadığı aşağıdaki özelliklere sahiptir:
Hem işlem içi hem de işlem dışı önbelleğe alma için birleşik bir API.
HybridCache
var olanIDistributedCache
veIMemoryCache
kullanım için açılan bir yerine geçecek şekilde tasarlanmıştır ve yeni önbelleğe alma kodu eklemek için basit bir API sağlar. Uygulamanın birIDistributedCache
uygulaması varsa,HybridCache
hizmet bunu ikincil önbelleğe alma için kullanır. Bu iki düzeyli önbelleğe alma stratejisi, bellek içi önbelleğin hızını ve dağıtılmış veya kalıcı önbelleğin dayanıklılığını sağlarHybridCache
.Damgalı koruma.
Sık kullanılan bir önbellek girdisi iptal edildiğinde ve çok fazla istek aynı önbellek girdisini aynı anda yeniden doldurmaya çalıştığında önbellek damgalama işlemi gerçekleşir.
HybridCache
eşzamanlı işlemleri birleştirerek belirli bir yanıta yönelik tüm isteklerin önbelleği doldurmak için ilk isteği beklemesini sağlar.Yapılandırılabilir serileştirme.
Serileştirme, çağrıdan zincirlenmiş ve
WithSerializerFactory
yöntemleri aracılığıylaWithSerializer
türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmeninAddHybridCache
bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işlerstring
byte[]
ve kullanırSystem.Text.Json
. Protobuf veya XML gibi diğer serileştirici türleri için yapılandırılabilir.
API'nin HybridCache
göreli basitliğini görmek için bunu kullanan kodu kullanan IDistributedCache
kodla karşılaştırın. Kullanımın nasıl IDistributedCache
göründüğüne bir örnek aşağıda verilmişti:
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)
{ /* ... */ }
}
Serileştirme gibi şeyler de dahil olmak üzere her seferinde doğru olanı yapmak için çok fazla çalışma gerekir. "Önbellek kaçamak" senaryosunda birden çok eşzamanlı iş parçacığıyla karşılaşabilir, hepsi önbellek kaçırabilir, tüm temel alınan verileri getirebilir, hepsini seri hale getirebilir ve bu verileri önbelleğe gönderebilirsiniz.
şu kodu kullanarak eşdeğer bir kod bulabilirsiniz 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 daha basittir ve kitaplık damgalı koruma ve olmayan diğer özellikler IDistributedCache
sağlar.
Uyumluluk
Kitaplık HybridCache
, .NET Framework 4.7.2 ve .NET Standard 2.0'a kadar eski .NET çalışma zamanlarını destekler.
Ek kaynaklar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
- ASP.NET Core'da HybridCache kitaplığı
- GitHub sorunu dotnet/aspnetcore #54647
HybridCache
kaynak kodu
Önbellek Etiketi Yardımcısı
İçeriği, Önbellek Etiketi Yardımcısı ile bir MVC görünümünden veya Razor Sayfasından önbelleğe alın. Önbellek Etiketi Yardımcısı, verileri depolamak için bellek içi önbelleğe alma kullanır.
Daha fazla bilgi için bkz . ASP.NET Core MVC'de Önbellek Etiketi Yardımcısı.
Dağıtılmış Önbellek Etiketi Yardımcısı
Dağıtılmış Önbellek Etiketi Yardımcısı ile dağıtılmış bulut veya Razor web grubu senaryolarındaki bir MVC görünümünden veya Sayfasından içeriği önbelleğe alın. Dağıtılmış Önbellek Etiketi Yardımcısı, verileri depolamak için SQL Server, Redis veya NCache kullanır.
Daha fazla bilgi için bkz . ASP.NET Core'da Dağıtılmış Önbellek Etiketi Yardımcısı.
Yanıtları Önbelleğe Alma
Yanıt önbelleğe alma ara yazılımı:
- HTTP önbellek üst bilgilerine göre sunucu yanıtlarını önbelleğe almayı etkinleştirir. Standart HTTP önbelleğe alma semantiğini uygular. Ara sunucular gibi HTTP önbellek üst bilgilerini temel alan önbellekler.
- Tarayıcılar genellikle önbelleğe almayı engelleyen istek üst bilgilerini ayarladığından, Sayfalar gibi Razor kullanıcı arabirimi uygulamaları için genellikle yararlı olmaz. ASP.NET Core 7.0 ve sonraki sürümlerde kullanılabilen çıktı önbelleğe alma, kullanıcı arabirimi uygulamalarından yararlanır. Çıkış önbelleğe alma ile yapılandırma, HTTP üst bilgilerinden bağımsız olarak nelerin önbelleğe alınması gerektiğine karar verir.
- Önbelleğe alma koşullarının karşılandığı istemcilerden gelen genel GET veya HEAD API istekleri için yararlı olabilir.
Yanıt önbelleğe almayı test etmek için Fiddler'ı veya istek üst bilgilerini açıkça ayarlayabilen başka bir aracı kullanın. Üst bilgileri açıkça ayarlamak, önbelleğe alma testi için tercih edilir. Daha fazla bilgi için bkz. Sorun giderme.
Çıkış önbelleği
Çıkış önbelleğe alma ara yazılımı, HTTP yanıtlarının önbelleğe alınmasını sağlar. Çıktı önbelleğe alma, yanıt önbelleğe almadan aşağıdaki yollarla farklıdır:
Önbelleğe alma davranışı sunucuda yapılandırılabilir.
Yanıt önbelleğe alma davranışı HTTP üst bilgileri tarafından tanımlanır. Örneğin, Chrome veya Edge ile bir web sitesini ziyaret ettiğinizde tarayıcı otomatik olarak bir
Cache-control: max-age=0
üst bilgi gönderir. Bu üst bilgi, sunucu istemci tarafından sağlanan yönergeleri izlediğinden yanıt önbelleğe almayı etkin bir şekilde devre dışı bırakır. Sunucuda yeni bir önbelleğe alınmış yanıt olsa bile her istek için yeni bir yanıt döndürülür. Çıkış önbelleğe alma işlemiyle istemci, sunucuda yapılandırdığınız önbelleğe alma davranışını geçersiz kılmaz.Önbellek depolama ortamı genişletilebilir.
Bellek varsayılan olarak kullanılır. Yanıt önbelleğe alma işlemi bellekle sınırlıdır.
Seçili önbellek girdilerini program aracılığıyla geçersiz kılabilirsiniz.
Yanıt önbelleğe alma işleminin HTTP üst bilgilerine bağımlılığı, önbellek girdilerini geçersiz hale getirmeniz için birkaç seçenek sunar.
Kaynak kilitleme, önbellek damgalama ve sürüde gök gürültüsü oluşturma riskini azaltır.
Sık kullanılan bir önbellek girdisi iptal edildiğinde ve çok fazla istek aynı önbellek girdisini aynı anda yeniden doldurmaya çalıştığında önbellek damgalama işlemi gerçekleşir. Gök gürültüsü sürü benzerdir: önbellek girişinde olmayan aynı yanıt için istekler dizisi. Kaynak kilitleme, belirli bir yanıta yönelik tüm isteklerin önbelleği doldurmak için ilk isteği beklemesini sağlar. Yanıt önbelleğe alma işleminin kaynak kilitleme özelliği yoktur.
Önbellek yeniden doğrulama bant genişliği kullanımını en aza indirir.
Önbellek yeniden doğrulama , sunucunun önbelleğe alınmış yanıt gövdesi yerine http
304 Not Modified
durum kodu döndürebileceği anlamına gelir. Bu durum kodu, istemciye isteğin yanıtının daha önce alınan yanıttan değişmediğini bildirir. Yanıt önbelleğe alma, önbellek yeniden doğrulama gerçekleştirmez.
Bellek içi önbellek
Bellek içi önbelleğe alma, önbelleğe alınmış verileri depolamak için sunucu belleğini kullanır. Bu önbelleğe alma türü, oturum benzimi kullanan tek bir sunucu veya birden çok sunucu için uygundur. Oturum benzitesi, yapışkan oturumlar olarak da bilinir. Oturum benzimi, bir istemciden gelen isteklerin her zaman işlenmek üzere aynı sunucuya yönlendirildiğini gösterir.
Daha fazla bilgi için bkz. ASP.NET Core'da bellek içi önbelleğe alma ve Azure Uygulaması lication Gateway oturum benşimi sorunlarını giderme.
Dağıtılmış Önbellek
Uygulama bir bulutta veya sunucu grubunda barındırıldığında verileri depolamak için dağıtılmış önbellek kullanın. Önbellek, istekleri işleyen sunucular arasında paylaşılır. İstemci için önbelleğe alınmış veriler varsa, istemci gruptaki herhangi bir sunucu tarafından işlenen bir istek gönderebilir. ASP.NET Core, SQL Server, Redis ve NCache dağıtılmış önbellekleriyle çalışır.
Daha fazla bilgi için bkz . ASP.NET Core'da dağıtılmış önbelleğe alma.
HybridCache
API, HybridCache
ve IMemoryCache API'lerinde IDistributedCache bazı boşlukları köprüler. HybridCache
, önbelleğe kaydetme ve önbellekten alma işlemlerinin çoğu yönünü işleyen varsayılan bir uygulamaya sahip soyut bir sınıftır.
Özellikler
HybridCache
diğer API'lerin sahip olmadığı aşağıdaki özelliklere sahiptir:
Hem işlem içi hem de işlem dışı önbelleğe alma için birleşik bir API.
HybridCache
var olanIDistributedCache
veIMemoryCache
kullanım için açılan bir yerine geçecek şekilde tasarlanmıştır ve yeni önbelleğe alma kodu eklemek için basit bir API sağlar. Uygulamanın birIDistributedCache
uygulaması varsa,HybridCache
hizmet bunu ikincil önbelleğe alma için kullanır. Bu iki düzeyli önbelleğe alma stratejisi, bellek içi önbelleğin hızını ve dağıtılmış veya kalıcı önbelleğin dayanıklılığını sağlarHybridCache
.Damgalı koruma.
Sık kullanılan bir önbellek girdisi iptal edildiğinde ve çok fazla istek aynı önbellek girdisini aynı anda yeniden doldurmaya çalıştığında önbellek damgalama işlemi gerçekleşir.
HybridCache
eşzamanlı işlemleri birleştirerek belirli bir yanıta yönelik tüm isteklerin önbelleği doldurmak için ilk isteği beklemesini sağlar.Yapılandırılabilir serileştirme.
Serileştirme, çağrıdan zincirlenmiş ve
WithSerializerFactory
yöntemleri aracılığıylaWithSerializer
türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmeninAddHybridCache
bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işlerstring
byte[]
ve kullanırSystem.Text.Json
. Protobuf veya XML gibi diğer serileştirici türleri için yapılandırılabilir.
API'nin HybridCache
göreli basitliğini görmek için bunu kullanan kodu kullanan IDistributedCache
kodla karşılaştırın. Kullanımın nasıl IDistributedCache
göründüğüne bir örnek aşağıda verilmişti:
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)
{ /* ... */ }
}
Serileştirme gibi şeyler de dahil olmak üzere her seferinde doğru olanı yapmak için çok fazla çalışma gerekir. "Önbellek kaçamak" senaryosunda birden çok eşzamanlı iş parçacığıyla karşılaşabilir, hepsi önbellek kaçırabilir, tüm temel alınan verileri getirebilir, hepsini seri hale getirebilir ve bu verileri önbelleğe gönderebilirsiniz.
şu kodu kullanarak eşdeğer bir kod bulabilirsiniz 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 daha basittir ve kitaplık damgalı koruma ve olmayan diğer özellikler IDistributedCache
sağlar.
Uyumluluk
Kitaplık HybridCache
, .NET Framework 4.7.2 ve .NET Standard 2.0'a kadar eski .NET çalışma zamanlarını destekler.
Ek kaynaklar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın:
- ASP.NET Core'da HybridCache kitaplığı
- GitHub sorunu dotnet/aspnetcore #54647
HybridCache
kaynak kodu
Önbellek Etiketi Yardımcısı
İçeriği, Önbellek Etiketi Yardımcısı ile bir MVC görünümünden veya Razor Sayfasından önbelleğe alın. Önbellek Etiketi Yardımcısı, verileri depolamak için bellek içi önbelleğe alma kullanır.
Daha fazla bilgi için bkz . ASP.NET Core MVC'de Önbellek Etiketi Yardımcısı.
Dağıtılmış Önbellek Etiketi Yardımcısı
Dağıtılmış Önbellek Etiketi Yardımcısı ile dağıtılmış bulut veya Razor web grubu senaryolarındaki bir MVC görünümünden veya Sayfasından içeriği önbelleğe alın. Dağıtılmış Önbellek Etiketi Yardımcısı, verileri depolamak için SQL Server, Redis veya NCache kullanır.
Daha fazla bilgi için bkz . ASP.NET Core'da Dağıtılmış Önbellek Etiketi Yardımcısı.
Yanıtları Önbelleğe Alma
Yanıt önbelleğe alma ara yazılımı:
- HTTP önbellek üst bilgilerine göre sunucu yanıtlarını önbelleğe almayı etkinleştirir. Standart HTTP önbelleğe alma semantiğini uygular. Ara sunucular gibi HTTP önbellek üst bilgilerini temel alan önbellekler.
- Tarayıcılar genellikle önbelleğe almayı engelleyen istek üst bilgilerini ayarladığından, Sayfalar gibi Razor kullanıcı arabirimi uygulamaları için genellikle yararlı olmaz. ASP.NET Core 7.0 ve sonraki sürümlerde kullanılabilen çıktı önbelleğe alma, kullanıcı arabirimi uygulamalarından yararlanır. Çıkış önbelleğe alma ile yapılandırma, HTTP üst bilgilerinden bağımsız olarak nelerin önbelleğe alınması gerektiğine karar verir.
- Önbelleğe alma koşullarının karşılandığı istemcilerden gelen genel GET veya HEAD API istekleri için yararlı olabilir.
Yanıt önbelleğe almayı test etmek için Fiddler'ı veya istek üst bilgilerini açıkça ayarlayabilen başka bir aracı kullanın. Üst bilgileri açıkça ayarlamak, önbelleğe alma testi için tercih edilir. Daha fazla bilgi için bkz. Sorun giderme.
Çıkış önbelleği
Çıktı önbelleğe alma .NET 7 ve sonraki sürümlerde kullanılabilir.
ASP.NET Core