0Pricing
C# Academy · Pelajaran

Kebijakan dan Invalidasi Cache

Kendalikan masa berlaku cache dan tag.

Kebijakan dan Invalidasi Cache adalah pelajaran C# Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar C# Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus C# Academy mencakup 4 pelajaran total.

Kebijakan Bernama

Daripada mengulangi pengaturan tembolok pada setiap titik akhir, tentukan kebijakan bernama yang dapat digunakan kembali sekali, lalu rujuk berdasarkan namanya.

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

Menerapkan Kebijakan Bernama

Rujuk kebijakan berdasarkan namanya saat menyimpan titik akhir dalam tembolok.

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

Label Tembolok

Label mengelompokkan entri yang terkait dalam tembolok agar Anda dapat menghapusnya secara bersamaan. Beri label pada titik akhir dengan Tag dalam kebijakannya.

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

IOutputCacheStore

Penghapusan entri dilakukan melalui IOutputCacheStore. Injeksi komponen tersebut, lalu panggil EvictByTagAsync untuk menghapus setiap entri yang memiliki suatu label.

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);
});

Mengapa Penghapusan Diperlukan pada Operasi Tulis

Daftar yang tersimpan dalam tembolok menjadi usang segera setelah data yang mendasarinya berubah. Menghapus label yang relevan pada setiap pembuatan, pembaruan, atau penghapusan akan menjaga data yang dibaca tetap baru tanpa menunggu kedaluwarsa.

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

Memberi Label Berdasarkan Sumber Daya

Berikan label dengan perincian yang lebih tinggi agar hanya respons tersimpan untuk satu item yang dihapus, bukan seluruh koleksi.

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

Aturan Vary-By dalam Kebijakan

Gabungkan kedaluwarsa, label, dan aturan pembeda dalam satu kebijakan bernama untuk membentuk kontrak penembolokan yang lengkap.

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

Nilai Vary-By Khusus

VaryByValue memungkinkan Anda menjadikan data permintaan apa pun sebagai dasar kunci tembolok, seperti ID penyewa yang diperoleh dari permintaan.

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

Penghapusan dibandingkan Kedaluwarsa

Ada dua cara entri meninggalkan tembolok:

  • Kedaluwarsa: berbasis waktu dan otomatis melalui Expire.
  • Penghapusan: secara eksplisit melalui EvictByTagAsync saat data berubah.

Gunakan keduanya: kedaluwarsa singkat sebagai jaring pengaman, dan penghapusan untuk menjaga ketepatan data.

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

Penguncian dan Perlindungan dari Lonjakan Permintaan

Penembolokan keluaran secara bawaan menggabungkan kegagalan tembolok yang terjadi secara bersamaan: ketika banyak permintaan mencapai titik akhir yang belum tersimpan dalam tembolok pada waktu yang sama, hanya satu yang menjalankan handler sementara permintaan lainnya menunggu. Anda dapat menonaktifkannya dengan SetLocking(false).

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

Tembolok Keluaran Terdistribusi

Secara bawaan, penyimpanan berada dalam memori dan bersifat per instans. Untuk beberapa peladen, gunakan penyimpanan terdistribusi sebagai pendukungnya (misalnya Redis) agar semua instans berbagi tembolok yang sama dan menghapus entri dari tembolok yang sama.

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

Pemeriksaan Singkat

Uji pemahaman Anda tentang penghapusan entri.

Ringkasan

Anda telah mempelajari kebijakan tembolok dan penghapusan entri:

  • Tentukan kebijakan bernama yang dapat digunakan kembali, lalu terapkan berdasarkan namanya.
  • Label mengelompokkan entri; IOutputCacheStore.EvictByTagAsync menghapusnya saat operasi tulis dilakukan.
  • Gabungkan kedaluwarsa (otomatis) dengan penghapusan (eksplisit).
  • Gunakan penyimpanan terdistribusi untuk penerapan pada beberapa peladen.

Kursus pembatasan laju dan penembolokan ini telah selesai.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Kebijakan dan Invalidasi Cache” gratis?

Ya — teks lengkap “Kebijakan dan Invalidasi Cache” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus C# Academy, upgrade ke CoddyKit PRO. Kursus C# Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Kebijakan dan Invalidasi Cache”?

Kendalikan masa berlaku cache dan tag. Kamu berlatih C# Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai C# Academy?

Tidak diperlukan pengalaman sebelumnya. C# Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.

Berapa lama pelajaran “Kebijakan dan Invalidasi Cache” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran C# Academy ini?

Ya. Setiap pelajaran C# Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Algoritme Pembatasan Laju
  2. Mengonfigurasi Middleware Pembatasan Laju
  3. Dasar-Dasar Caching Output
  4. Kebijakan dan Invalidasi Cache
← Kembali ke C# Academy