ASP.NET Core'da önbelleğe almaya genel bakış

Not

Bu, bu makalenin en son sürümü değildir. Geçerli sürüm için bu makalenin .NET 8 sürümüne bakın.

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.

Önemli

Bu bilgiler, ticari olarak piyasaya sürülmeden önce önemli ölçüde değiştirilebilen bir yayın öncesi ürünle ilgilidir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.

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 olan IDistributedCache ve IMemoryCache 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 bir IDistributedCache 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ğlar HybridCache .

  • 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ığıyla WithSerializer türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmenin AddHybridCache bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işler string byte[] ve kullanır System.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 IDistributedCachekodla 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:

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 olan IDistributedCache ve IMemoryCache 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 bir IDistributedCache 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ğlar HybridCache .

  • 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ığıyla WithSerializer türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmenin AddHybridCache bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işler string byte[] ve kullanır System.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 IDistributedCachekodla 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:

Ö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 olan IDistributedCache ve IMemoryCache 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 bir IDistributedCache 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ğlar HybridCache .

  • 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ığıyla WithSerializer türe özgü ve genelleştirilmiş seri hale getiriciler desteğiyle hizmeti kaydetmenin AddHybridCache bir parçası olarak yapılandırılır. Varsayılan olarak hizmet, diğer her şeyi dahili olarak işler string byte[] ve kullanır System.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 IDistributedCachekodla 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:

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