FusionCache ve Redis ile .NET'te iki katmanlı önbellek
Bu rehber, bir ürün kataloğu API'sinde FusionCache'i yerel L1 belleği ve Redis'i paylaşılan L2 katmanı olarak birlikte nasıl kullanacağınızı anlatıyor. Yazar, Clean Architecture sınırlarını koruyarak önbelleğin doğru davranışına odaklanıyor. Çok instance'lı uygulamalarda okuma performansını ve tutarlılık kararlarını planlamak isteyenler için pratik bir başlangıç noktası.
Kilit noktalar
- FusionCache 2.9.0 ile yerel L1 önbelleği ve Redis L2 katmanı birlikte yapılandırılır; core paketi tek başına yalnızca L1 çalıştırır.
- TTL ile bellek tahliyesi farklı şeylerdir; tazelik süresi ayrı, eviction davranışı ise Redis tarafındaki maxmemory ayarına bağlıdır.
- Okuma yolu cache aside desenini izler: önce L1, sonra L2, en son factory ile veritabanı sorgusu.
- Önbellek katmanı, Application katmanındaki okuma arayüzünü saran bir decorator olarak eklenir; Domain ve Application FusionCache tiplerine bağımlı olmaz.
- Yerel demo için redis:8.2-alpine, maxmemory 128mb ve allkeys-lru kullanılıyor; üretimde Redis'e ağ izolasyonu, ACL ve TLS uygulanmalı.
Makale, bir ürün kataloğu API'sinde FusionCache ile Redis'i birlikte kullanmayı anlatıyor. Veritabanı ana kaynak olarak kalırken uygulama içi L1 belleği ve paylaşılan Redis L2 katmanı okumaları hızlandırıyor. Yazar performans rakamlarından çok doğru davranışa odaklanıyor: TTL bir tazelik politikasıdır, bellek tahliyesi ondan ayrı bir olaydır ve veritabanındaki bir değişiklik kopyaları kendiliğinden güncellemez.
Mimaride Domain, Application, Infrastructure ve Api projeleri ayrılıyor; önbellek, okuma sorgusunu saran bir decorator olarak Infrastructure katmanında duruyor. Kurulumda FusionCache 2.9.0, Redis backplane ve Microsoft Redis provider'ı kullanılıyor, örnek net10.0 ve redis:8.2-alpine üzerinde çalışıyor. Yerel Redis ayarlarında maxmemory ve allkeys-lru tanımlanıyor; üretimde ise özel ağ, ACL ve TLS gerekiyor.
Gerçek dünyada kullanımı
- Birden fazla instance'ta çalışan bir ürün kataloğu API'sinde sık okunan ürün detaylarını veritabanına gitmeden sunmak.
- Fiyat değişikliklerinden sonra eski ürün verisinin kısa süre görünmesini kabul edebilen bir e-ticaret arka ucu.
- Veritabanı katmanını değiştirmeden sorgu sonuçlarını önbelleğe alması gereken, Clean Architecture ile yazılmış bir .NET servisi.
Neden önemli
Önbelleği bir decorator olarak eklemek ve TTL, eviction ile invalidation kurallarını baştan tanımlamak, çok instance'lı bir .NET uygulamasında hem performansı hem de veri tazeliği beklentisini kontrollü tutar. Yazının vurguladığı gibi önbellek davranışı, benchmark sayısından daha önemli bir tasarım kararıdır.