.NET'te Tüm Önbellek Türleri: Her Birini Ne Zaman Kullanmalı (1. Bölüm)
Anton Martyniuk'un yeni derinlemesine yazısı, IMemoryCache, Redis destekli IDistributedCache ve HybridCache dahil .NET'teki önbellek seçeneklerini ve her birinin ne zaman uygun olduğunu anlatıyor. Yazı, önbelleğin yavaş sorguları gizlemek yerine onlardan sonra eklenmesi gerektiğini ve tek süreçli bir önbelleğin birden fazla instance'da eski veri döndürebileceğini gösteriyor. Ölçekli bir ASP.NET Core uygulaması için önbellek seçmeden önce okumaya değer.
Kilit noktalar
- Önbelleği yavaş sorguyu düzelttikten sonra ekleyin, sorunu gizlemek için kullanmayın.
- IMemoryCache için AddMemoryCache ile birlikte SizeLimit ayarlayın; SizeLimit varsa her girişte SetSize çağrılmalı.
- Birden fazla instance çalıştırıyorsanız süreç içi IMemoryCache yerine paylaşılan bir store kullanın.
- IDistributedCache ile Redis'te bağlantı hatasını yakalayıp veritabanına geri dönen bir yol ekleyin.
- HybridCache'te RemoveByTagAsync ile etiketli anahtarları toplu silebilirsiniz.
- HybridCache'te L1 senkronize olmadığından LocalCacheExpiration değerini kısa tutun.
Bu derinlemesine yazının ilk bölümü, .NET'teki önbellek seçeneklerini ve hangisinin ne zaman uygun olduğunu inceliyor. Yazar, önbelleğin yavaş veritabanı sorgularını gizlemek için değil, onlar düzeltildikten sonra eklenmesi gerektiğini vurguluyor. Bir kargo takip API'si üzerinden, süreç içi bir önbelleğin uygulama iki instance'a ölçeklendiğinde nasıl eski veri döndürebileceği gösteriliyor.
Her seçeneğin ödünleri ayrı ayrı ele alınıyor. IMemoryCache nesneyi serileştirmeden aynı referansla döndürür, ancak varsayılan bir boyut sınırı yok, anahtar bazında kilit yok ve instance'lar arasında paylaşım da yok. IDistributedCache ile Redis veriyi paylaşır ve yeniden başlatmalara dayanır, fakat her isabet bir ağ turu ve deserialization maliyeti getirir. HybridCache bellek içi L1 ile isteğe bağlı Redis L2'yi birleştirir, ancak L1 katmanları instance'lar arasında senkronize değildir.
Gerçek dünyada kullanımı
- Birden fazla instance'da çalışan kargo takip API'si, ortak bir Redis üzerinden aynı veriyi görmeli.
- Sık okunan ama nadiren değişen bir referans verisini tek instance'lı bir servise bellek içi önbellekle eklemek.
- Toplu veri içe aktarımından sonra ilgili tüm önbellek girişlerini etiketle topluca temizlemek.
Neden önemli
Ölçeklendiğinizde önbellek seçiminiz tutarlılığı doğrudan etkiler; yanlış seçim, kullanıcıya bir kez güncellenmiş bir veriyi tekrar eski haliyle gösterebilir. HybridCache'i L2 olmadan başlatıp sonra Redis eklemek mümkün, ama L1 senkronizasyonu için kısa süreli expiration gerekir.
Benzer haberler
- ASP.NET Core Web API'de sık yapılan 6 hata ve yerine kullanılacak desenlerDEV Community: #aspnetcore23 Eki
- MCP Sunucularında Ölçekte Rate Limiting ve Kaynak YönetişimiDEV Community: #aspnetcore1 gün önce
- Odoo'ya lead gönderirken kaybetmemek: ASP.NET Core'da transactional outboxDEV Community: #aspnetcore2 gün önce