Asp.NET Core’da In-Memory Cache Kullanımı
Başlarken
İçeriğin seyrine eş zamanlı eşlik edebilmek için elinizin altında bir Asp.NET Core uygulaması olmasına özen göstermenizi tavsiye ederim.
Service ve Arayüz Tanıtımı
Asp.NET Core uygulamalarında In-Memory Cache yapabilmek için ‘AddMemoryCache‘ servisini kullanmaktayız. Bu servisi uygulamaya dahil ettikten sonra ‘IMemoryCache‘ interface’i ile dependency injection taleplerinde bulunarak cacheleme operasyonlarını gerçekleştirebiliriz.
AddMemoryCache;
IMemoryCache;
Şimdi dependency injection ile talep ettiğimiz ‘IMemoryCache’ nesnesi üzerinden caching işlemlerinde kullanacağımız metot ve propertyleri inceleyelim.
Get – Set Fonksiyonları İsimlerinden de anlaşılacağı üzere memory’e data cachelemek ve cachelenen datayı okumak için Get ve Set metotları kullanılmaktadır. key – value diziliminde olan bu metotlardan Set metodu datayı cachelemek, Get metodu ise cache’de ki datayı okumak/elde etmek için kullanılır.
public IActionResult SetCache()
{
_memoryCache.Set("employeeName", "Muiddin Impatrino");
return View();
}
public IActionResult GetCache()
{
string name = _memoryCache.Get<string>("employeeName");
return View();
}Remove Fonksiyonu Cachelenmiş datayı silmek için kullanılır.
public void RemoveCache()
{
_memoryCache.Remove("employeeName");
}TryGetValue Fonksiyonu Cache’de belirtilen key değerine uygun veriyi sorgular. Veri yoksa ‘false’ eğer varsa ‘true’ döndürerek ‘out’ olan ikinci parametresinde de cacheden datayı döndürür.
public IActionResult GetCache()
{
if (_memoryCache.TryGetValue<string>("employeeName", out string data))
{
//data burada elde edilmiştir
}
return View();
}GetOrCreate Fonksiyonu Belirtilen key değerinde data var mı kontrol eder, yoksa oluşturur.
public IActionResult GetCache()
{
string name = _memoryCache.GetOrCreate<string>("employeeName", entry =>
{
entry.SetValue("Muiddin Impatrino");
Console.WriteLine(DateTime.Now);
return entry.Value.ToString();
});
return View();
}
Absolute&Sliding Expiration Cache’de tutulacak datanın yaşam süresini belirlememizi sağlayan özelliklerdir. Absolute, datanın cache’de tutulma süresini belirlerken; Sliding, belirtilen süre zarfında cache’den data talep edilirse eğer bir o kadar daha tutulma süresini uzatacak aksi taktirde datayı silecektir. Her ikiside aynı anda kullanıldığı zaman sliding, absolute’te belirtilen süre dolana kadar periyodik işlevine devam edecektir.
‘GetOrCreate’ metoduyla kullanımı aşağıdaki gibidir;

‘Set’ metoduyla ise aşağıdaki gibi ‘MemoryCacheEntryOptions’ nesnesiyle kullanabilirsiniz;
Cache Priority Yayın süreci boyunca cache’e depolanan veriler memory’i haddinden fazla şişirebilir ve yeni veriler için sistem tarafından var olan veriler silinmek istenebilir. İşte böyle bir durumda cache’den silinecek olan verilerin önceliklerini ve hangilerinin kalıcı olacağını Priority değeri aracılığıyla belirlemekteyiz.
Priority değeri; Low, Normal, High ve NeverRemove olmak üzere dört değer almaktadır. Bu değerleri sırasıyla açıklarsak eğer; Low : Önem derecesi en düşük olan datadır. İhtiyaç doğrultusunda ilk silinecek datadır. Normal : Önem derecesi Low’dan sonra gelen datadır. High : Önemli veridir. Çok zaruri olduğu taktirde cache’den silinecektir. NeverRemove : Kesinlikle silinmemesi gereken datadır. Sınıra gelinen bir memory’de Priority değeri NeverRemove olan datalarla sınır aşılırsa exception fırlatılır.
RegisterPostEvictionCallback Olayı Cachelenmiş bir datanın hangi sebepten dolayı memory’den silindiğine dair bilgi edinmemizi sağlayan olayı fırlatan bir fonksiyondur. Parametre olarak public delegate void PostEvictionDelegate(object key, object value, EvictionReason reason, object state) imzasına sahip bir delegate almaktadır. Bu delegate aracılığıyla temsil edilen fonksiyonun ‘key’ parametresine cachelenmiş datanın keyini, ‘value’ parametresine değerini, ‘reason’ parametresine ise silinme sebebini döndürmektedir.
vet… Böylece Asp.NET Core uygulamalarında In-Memory Caching’in nasıl yapıldığını sanırım yeterince görmüş, incelemiş olduk. Bu içeriğimizden sonra artık yazı serimizde Redis ile ilgili birebir içerikler oluşturarak esas konumuza temas edebiliriz.
