Caching Stratejileri¶
Caching, uygulama performansını artırmanın ve kaynak tüketimini azaltmanın etkili bir yoludur. Ancak, yanlış kullanılan caching stratejileri performans sorunlarına, veri tutarsızlığına ve fazla bellek kullanımına yol açabilir.
1. Gereksiz Yere Büyük Verileri Cache Etmek¶
❌ Yanlış Kullanım: Büyük verileri doğrudan cache’e eklemek.
var largeData = GetLargeData();
_memoryCache.Set("LargeData", largeData);
✅ İdeal Kullanım: Büyük verileri bölerek veya sıkıştırarak cache’e ekleyin.
var largeData = GetLargeData();
var compressedData = CompressData(largeData);
_memoryCache.Set("CompressedLargeData", compressedData);
2. Cache Süresini Yanlış Ayarlamak¶
❌ Yanlış Kullanım: Sonsuz süreyle cache kullanmak.
_memoryCache.Set("Data", data, TimeSpan.MaxValue);
✅ İdeal Kullanım: Uygun bir süre belirleyin ve gerektiğinde sliding expiration kullanın.
_memoryCache.Set("Data", data, new MemoryCacheEntryOptions
{
AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30),
SlidingExpiration = TimeSpan.FromMinutes(10)
});
3. Distributed Cache Kullanımını İhmal Etmek¶
❌ Yanlış Kullanım: Tüm cache verilerini sadece bellek içinde saklamak.
services.AddMemoryCache();
✅ İdeal Kullanım: Dağıtılmış cache kullanarak ölçeklenebilirliği artırın.
services.AddStackExchangeRedisCache(options =>
{
options.Configuration = "localhost:6379";
options.InstanceName = "MyApp_";
});
4. Lazy Loading Kullanımını İhmal Etmek¶
❌ Yanlış Kullanım: Verileri önceden yükleyip gereksiz bellek kullanımı yapmak.
var data = GetDataFromDatabase();
_memoryCache.Set("Data", data);
✅ İdeal Kullanım: Lazy loading ile yalnızca gerektiğinde verileri yükleyin.
_memoryCache.GetOrCreate("Data", entry =>
{
entry.AbsoluteExpirationRelativeToNow = TimeSpan.FromMinutes(30);
return GetDataFromDatabase();
});
5. Cache Invalidasyonunu Yönetememek¶
❌ Yanlış Kullanım: Veri değişikliklerini cache’e yansıtmamak.
_memoryCache.Set("User_123", user);
user.Name = "Updated Name"; // Cache güncellenmiyor
✅ İdeal Kullanım: Veri değişikliklerini cache’de güncelleyin veya invalidasyonu yönetin.
_memoryCache.Remove("User_123");
_memoryCache.Set("User_123", updatedUser);
6. Hassas Verilerin Cache Edilmesi¶
❌ Yanlış Kullanım: Şifreler veya kişisel bilgileri cache’e eklemek.
_memoryCache.Set("UserPassword", "123456");
✅ İdeal Kullanım: Hassas verileri cache’e eklemekten kaçının.
7. Cache Kullanımını Ölçümlememek¶
❌ Yanlış Kullanım: Cache hit/miss oranlarını izlememek.
✅ İdeal Kullanım: Cache performansını izlemek için ölçümleme yapın.
- Örnek: Prometheus, Grafana veya App Insights kullanarak performans verilerini toplayın.
- Kodda Örnek:
if (!_memoryCache.TryGetValue("Data", out var data))
{
data = GetDataFromDatabase();
_memoryCache.Set("Data", data);
Console.WriteLine("Cache miss!");
}
else
{
Console.WriteLine("Cache hit!");
}