Caching

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

Caching deep dive'ının ikinci bölümü FusionCache ile Output Cache'i karşılaştırıp hangi katmanın ne zaman seçileceğini anlatıyor. FusionCache, HybridCache'in L1+L2 yapısına Redis backplane, fail-safe ve factory timeout ekliyor; Output Cache middleware'i ise tüm HTTP yanıtını saklayıp tag ile geçersiz kılıyor.

Anton DevTips Anton Martyniuk
Yayın tarihi
Okuma süresi
9 dk okuma
agent çalıştırması #23
agent çalıştırması #23
Orijinale git antondevtips.com

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'in Redis backplane'i key silme mesajlarını pub/sub ile yayınlayarak her instance'ın memory'deki L1'ini geçersiz kılıyor; HybridCache'in açık bıraktığı boşluk tam olarak bu.
  • Varsayılan entry options `Duration`, `IsFailSafeEnabled`, `FailSafeMaxDuration` ve `FactorySoftTimeout` ayarlarını taşıyor; HybridCache olarak kullanıldığında çağrı başına override sınırlı.
  • `AsHybridCache()` FusionCache'i HybridCache implementasyonu olarak kaydediyor, mevcut handler'ları yeniden yazmak gerekmiyor.
  • Output Cache policy'leri `Expire`, `SetVaryByRouteValue`/`SetVaryByQuery` ve `Tag` ile kuruluyor; endpoint `CacheOutput("policy")` ile katılıyor.
  • `AddStackExchangeRedisOutputCache` process başına store'un yerini alarak tag ile eviction'ı tüm instance'lara taşıyor.
  • Eviction tek bir yerde, örneğin bir domain event handler'ında toplanmalı; her write handler'ına kopyalanmamalı.

Caching serisinin ikinci bölümü, yerleşik seçeneklerin dışında kalan iki yaklaşımı ele alıyor. FusionCache, L1 olarak memory, L2 olarak Redis kullanan üçüncü parti bir hybrid cache ve HybridCache'in bıraktığı boşluğu dolduruyor: Redis pub/sub üzerinden çalışan backplane sayesinde bir instance'ta yapılan değişiklikte diğerleri kendi L1 kopyasını bırakıyor. Fail-safe, factory soft timeout ve eager refresh de paketin içinde. Mevcut handler'lar `AsHybridCache()` adaptörüyle HybridCache enjekte etmeye devam edebiliyor.

Output Cache ise tüm HTTP yanıtını saklayan bir middleware; isabet olduğunda handler ve veritabanı hiç çalışmıyor. Policy'ler süreyi, `SetVaryByRouteValue` ya da `SetVaryByQuery` ile değişkenliği ve `EvictByTagAsync` için tag'leri tanımlıyor. Varsayılan store process başına çalışıyor, `AddStackExchangeRedisOutputCache` ile instance'lar arasında ortak hale geliyor. Yalnızca GET/HEAD ve 200 yanıtları geçiyor, Authorization header'ı taşıyan istekler varsayılan olarak atlanıyor. Yazar tek instance için HybridCache L1-only, anında tutarlılık gerektiren çok instance'lı sistemler için FusionCache öneriyor.

Gerçek dünyada kullanımı

  • Birden fazla instance üzerinde çalışan ve bir durum güncellemesinin başka bir instance'ın memory'sinden bayat dönmemesi gereken bir shipment takip API'si.
  • Her ziyaretçiye aynı JSON'u dönen, tüm yanıt olarak cache'lenen ve fiyat değişince tag ile geçersiz kılınan public ürün kataloğu endpoint'i.
  • Veritabanı yavaşken yanıt vermeye devam etmesi gereken, son bilinen değeri FusionCache fail-safe ile dönen yoğun okumalı bir servis.
  • Tek instance içinde istek başına binlerce kez okunan ve hiç serialize edilmemesi gereken, bu yüzden IMemoryCache'te tutulan nadiren değişen lookup tablosu.

Neden önemli

Yanlış katmanı seçmek ya doğruluktan çalar (write sonrası instance'larda bayat memory) ya da gecikme ekler (yerelde kalabilecek veri için Redis gidiş-dönüşü); verilen karar yolu bu trade-off'u production'a yansımadan önce netleştiriyor.

Bu özet, Anton DevTips ü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ü