Caching

.NET'te Tüm Caching Türleri: Hangisi Ne Zaman Kullanılır? (Derin İnceleme, 2. Bölüm)

.NET'teki son iki caching seçeneğine derinlemesine bakış: hybrid L1+L2 modelinin üzerine Redis backplane, fail-safe ve eager refresh ekleyen FusionCache ile tam HTTP cevaplarını tag bazlı temizlemeyle saklayan Output Cache. Yazı paketleri, DI kurulumunu ve iki seçeneğin tuzaklarını anlatıyor.

DEV Community: #aspnetcore Anton Martyniuk
Yayın tarihi
Okuma süresi
6 dk okuma
agent çalıştırması #24
agent çalıştırması #24
Orijinale git dev.to

Bu haberi bildir

Özette bir hata mı var, ya da bu içeriğin sahibi misin? Mesajın doğrudan bana e-posta olarak gelir.

Mesaj türü

Kilit noktalar

  • FusionCache, invalidation sonrası diğer instance'lardaki L1 kopyasını düşüren Redis pub/sub backplane'i ekliyor; HybridCache'in bayat bellek sorununu doğrudan çözüyor.
  • Fail-safe, soft/hard factory timeout ve eager refresh sayesinde veritabanı ya da bağımlılık çöktüğünde API son bilinen değerle cevap vermeye devam ediyor.
  • Gerekli paketler: ZiggyCreatures.FusionCache, System.Text.Json serializer, Redis backplane ve Microsoft.Extensions.Caching.StackExchangeRedis.
  • Output Cache tüm HTTP cevabını saklıyor; hit durumunda ne handler ne de veritabanı çalışıyor. Policy'ler Expire(), SetVaryByRouteValue() veya SetVaryByQuery() ve Tag() ile tanımlanıyor.
  • IOutputCacheStore.EvictByTagAsync() ile tag bazlı temizleme, ancak Microsoft.AspNetCore.OutputCaching.StackExchangeRedis eklendiğinde instance'lar arasında çalışıyor.
  • Output Cache varsayılan olarak sadece GET/HEAD ve 200 cevaplarını işliyor; kullanıcıya göre vary etmezseniz yetkilendirilmiş istekler hiç cache'lenmiyor.

Anton Martyniuk'un caching serisinin ikinci bölümü, IMemoryCache, IDistributedCache, Redis ve Microsoft'un HybridCache'ini geride bırakıp üretimde en çok işe yarayan iki seçeneğe geçiyor: FusionCache ve Output Cache. FusionCache, aynı L1 bellek + L2 dağıtık yapıya ve stampede korumasına sahip, açık kaynaklı bir hybrid cache; HybridCache'te olmayanları ekliyor: Redis pub/sub üzerinden tüm instance'lara invalidation mesajı gönderen backplane, factory hata verdiğinde son bilinen değeri dönen fail-safe, soft/hard timeout ve sıcak key'ler için arka planda eager refresh.

Yazı, gerekli paketleri (ZiggyCreatures.FusionCache ile System.Text.Json serializer, Redis backplane ve Redis distributed cache), FusionCacheEntryOptions ile dependency injection kurulumunu ve HybridCache enjekte eden mevcut handler'ların çalışmaya devam etmesini sağlayan AsHybridCache() adaptörünü gösteriyor. Output Cache bölümü Expire(), SetVaryByRouteValue() ve Tag() ile tanımlanan named policy'leri, endpoint'teki CacheOutput() çağrısını, IOutputCacheStore.EvictByTagAsync() ile tag bazlı temizlemeyi ve paylaşımlı Redis store paketini anlatıyor. Yetkilendirilmiş isteklerin varsayılan olarak cache'lenmediği ve eski response caching middleware'inin artık kullanılmaması gerektiği vurgulanıyor.

Gerçek dünyada kullanımı

  • Birden fazla instance üzerinde çalışan ve güncellemeden sonra bayat veri döndürmemesi gereken okuma ağırlıklı bir shipment veya ürün API'si.
  • Tekrarlanan isteklerde handler'ın ve veritabanının hiç çalışmaması gereken herkese açık bir katalog endpoint'i.
  • Yavaş bir dış servisi çağıran ve o servis kapalıyken yedek değere ihtiyaç duyan bir API.
  • Yazma yapan bir handler'ın cache'lenmiş liste cevaplarını tüm instance'larda aynı anda temizlemesi gereken çok instance'lı bir kurulum.

Neden önemli

FusionCache ile Output Cache arasındaki seçim, veriyi mi yoksa tüm cevabı mı cache'lediğinizi ve instance'ların birbirini temizleyip temizlemediğini belirliyor. Backplane ve Redis output store, yük altında doğru kalan bir cache ile sessizce bayat veri döndüren bir cache arasındaki fark.

Bu özet, DEV Community: #aspnetcore üzerindeki orijinal yazıdan agent tarafından üretildi. Yazının tamamı ve tüm hakları ilgili yazara/yayıncıya aittir. Orijinal yazıya git

Benzer haberler

Geri bildirim

Bir hata mı buldun, bir fikrin mi var? Yazdığın mesaj doğrudan bana e-posta olarak gelir.

Mesaj türü