C# Academy · Ders

Önbellek İlkeleri ve Geçersiz Kılma

Önbellek ömrünü ve etiketlerini denetleyin.

4. ders / 413 adım

Önbellek İlkeleri ve Geçersiz Kılma, CoddyKit'te ücretsiz bir C# Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C# Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C# Academy kursu toplamda 4 dersten oluşur.

Adlandırılmış İlkeler

Önbellek ayarlarını her uç noktada tekrarlamak yerine, yeniden kullanılabilir adlandırılmış ilkeleri bir kez tanımlayın ve bunlara adlarıyla başvurun.

builder.Services.AddOutputCache(options =>
{
    options.AddPolicy("Short", policy =>
        policy.Expire(TimeSpan.FromSeconds(10)));
    options.AddPolicy("Long", policy =>
        policy.Expire(TimeSpan.FromMinutes(10)));
});

Adlandırılmış Bir İlkeyi Uygulama

Bir uç noktayı önbelleğe alırken ilkeye adıyla başvurun.

app.MapGet("/catalog", GetCatalog)
   .CacheOutput("Long");

Önbellek Etiketleri

Etiketler, ilişkili önbellek girdilerini gruplandırarak bunları birlikte geçersiz kılmanızı sağlar. İlkenizde bir uç noktayı Tag ile etiketleyin.

app.MapGet("/products", GetProducts)
   .CacheOutput(policy => policy
        .Expire(TimeSpan.FromMinutes(5))
        .Tag("products"));

IOutputCacheStore Arayüzü

Geçersiz kılma işlemi IOutputCacheStore üzerinden gerçekleştirilir. Bunu bağımlılık olarak ekleyin ve etiket taşıyan tüm girdileri temizlemek için EvictByTagAsync çağrısını yapın.

app.MapPost("/products", async (
    Product p, AppDb db, IOutputCacheStore cache, CancellationToken ct) =>
{
    db.Products.Add(p);
    await db.SaveChangesAsync(ct);
    await cache.EvictByTagAsync("products", ct);
    return Results.Created($"/products/{p.Id}", p);
});

Yazma İşlemlerinde Neden Geçersiz Kılmalı

Temel veriler değiştiği anda önbelleğe alınmış bir liste güncelliğini yitirir. Her oluşturma, güncelleme veya silme işleminde ilgili etiketi önbellekten çıkarmak, sona erme süresini beklemeden okumaların güncel kalmasını sağlar.

// After any mutation:
await cache.EvictByTagAsync("products", ct);

Kaynağa Göre Etiketleme

Tüm koleksiyonu değil, yalnızca tek bir öğenin önbelleğe alınmış yanıtlarını çıkarmak için daha ayrıntılı düzeyde etiketleme yapın.

app.MapGet("/products/{id}", GetProduct)
   .CacheOutput(policy => policy.Tag("products"));
// Evict the single item's detail + the list together
await cache.EvictByTagAsync("products", ct);

Bir İlkede Değişkenlik

Tam bir önbelleğe alma sözleşmesi oluşturmak için sona erme süresini, etiketleri ve değişkenlik kurallarını tek bir adlandırılmış ilkede birleştirin.

options.AddPolicy("ProductList", policy => policy
    .Expire(TimeSpan.FromMinutes(5))
    .Tag("products")
    .SetVaryByQuery("page", "size"));

Özel Değişkenlik Değeri

VaryByValue, istekten çözümlenen kiracı kimliği gibi rastgele istek verilerini kullanarak önbellek anahtarını belirlemenizi sağlar.

policy.VaryByValue(context =>
    new KeyValuePair<string, string>(
        "tenant",
        context.Request.Headers["X-Tenant"].ToString()));

Önbellekten Çıkarma ve Sona Erme

Girdilerin önbellekten çıkmasının iki yolu vardır:

  • Sona erme: zamana bağlıdır ve Expire aracılığıyla otomatik gerçekleşir.
  • Önbellekten çıkarma: veriler değiştiğinde EvictByTagAsync aracılığıyla açıkça gerçekleştirilir.

İkisini birlikte kullanın: güvenlik ağı olarak kısa bir sona erme süresi, doğruluk için önbellekten çıkarma.

// belt-and-suspenders: Expire(5min) + EvictByTag on write

Kilit ve İstek Çığı Koruması

Çıktı önbelleğe alma, varsayılan olarak eşzamanlı önbellek kaçırmalarını birleştirir: çok sayıda istek aynı anda önbelleğe alınmamış bir uç noktaya ulaştığında yalnızca biri handler çalıştırır, diğerleri bekler. SetLocking(false) ile bu davranışı devre dışı bırakabilirsiniz.

policy.SetLocking(false); // allow concurrent regeneration

Dağıtık Çıktı Önbelleği

Varsayılan olarak depo bellek içidir ve her örneğe özeldir. Birden çok sunucu için depoyu dağıtık bir depoyla (ör. Redis) destekleyin; böylece tüm örnekler aynı önbelleği paylaşır ve geçersiz kılar.

// Register a distributed IOutputCacheStore implementation
// (e.g. a Redis-backed package) so EvictByTag works cluster-wide

Hızlı Kontrol

Geçersiz kılma konusundaki anlayışınızı test edin.

Özet

Önbellek ilkelerini ve geçersiz kılmayı öğrendiniz:

  • Yeniden kullanılabilir adlandırılmış ilkeler tanımlayın ve bunları adlarıyla uygulayın.
  • Etiketler girdileri gruplandırır; IOutputCacheStore.EvictByTagAsync, yazma işlemlerinde bu girdileri temizler.
  • Sona ermeyi (otomatik) önbellekten çıkarmayla (açıkça) birleştirin.
  • Birden çok sunuculu dağıtımlar için dağıtık bir depo kullanın.

Hız sınırlama ve önbelleğe alma kursu tamamlandı.

Başlamak ücretsiz

Yapay zeka eğitmeniyle C# öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
93
Dersler
346

Sıkça Sorulan Sorular

“Önbellek İlkeleri ve Geçersiz Kılma” dersi ücretsiz mi?

Evet — “Önbellek İlkeleri ve Geçersiz Kılma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C# Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C# Academy kursu toplamda 4 dersten oluşur.

“Önbellek İlkeleri ve Geçersiz Kılma” dersinde ne öğreneceğim?

Önbellek ömrünü ve etiketlerini denetleyin. C# Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C# Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C# Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“Önbellek İlkeleri ve Geçersiz Kılma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C# Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C# Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Hız Sınırlama Algoritmaları
  2. Hız Sınırlama Ara Yazılımını Yapılandırma
  3. Çıktı Önbellekleme Temelleri
  4. Önbellek İlkeleri ve Geçersiz Kılma
← C# Academy Sayfasına Dön