Asp.Net Core Mvc’de Memory Cache

Selamlar,bu makalede Asp.Net Core Mvc’de Memory Cache kullanımı üzerine konuşacağız. Temel bir giriş yapıp örnek bir uygulama üzerinde incelemeye çalışacağız.

Geliştirdiğimiz hemen hemen tüm uygulamalar bir veri kaynağından beslenmektir ve bu veriler işlenerek anlamlı hale getirilerek kullanıcıya sunulmaktadır. Her şeyin çok hızlı değiştiği ve geliştiği bu zamanda uygulamalar için önemli hususlardan bir tanesi performans olarak ortaya çıkmaktadır. Uygulamanın kullanıcı kitlesi,beslendiği veri kaynağı büyüklüğü gibi bir çok etken performans etki etmektedir. Hal böyle olunca uygulama geliştirme aşamalarından bu sorunların önüne geçme ihtiyacı doğmaktadır.İşte tamda bu noktada karşımıza Cache kavramı çıkmaktadır.

Memory Cache


Memory Cache uygulamanın barındırıldığı sunucunun ram belleğinde,elimizde bulunan veri kaynağının tutulmasıdır. Tutulacak verinin boyutu sunucunun ram boyutu doğru orantılıdır. 2 GB belleğe sahip bir sunucuda 2 GB boyutunda veri tutulabilir.

MemoryCacheEntryOptions ve IMemoryCache

  • Get(); Cache’de bulunan datanın okunması işlemi için kullanılan methodtur.
  • Set(); Cache’e data yazmak için kullanılır.
  • Remove(); Parametre olarak key değerine ait cache’i siler.
  • TryGetValue(); methodu true yada false bir sonuç döner ve out olarak bir parametre alır. Gönderilen parametre ile alınan verinin türü eşleşir ise true sonuç dönerek alınan veriyi dışarı aktarır. Tek method ile iki sonuç dönebilmeye yarayan bu metodu daha iyi anlamak için C# ref out keyword kullanımına bakmanızı tavsiye ederim.
  • Priority: Ram dolduğunda hangi cache daha önce silenecek onun belirlenmesi için kullanılır. “High:” Önemli bunu hiç bir zaman silme, “Low:” Önemsiz ram dolunca silebilirsin,“NeverRemove:” Önemli ram bolsa bile silme,“Normal:” Önemsiz ram dolunca silebilirsin gibi öncelikler arasından seçim yaparak yaratılan cache’e öncelik tanımlayabiliyoruz. Priority = CacheItemPriority.NeverRemove;
  • AbsoluteExpiration: Cache’in ömrünü belirlemek için kullanılır. Belirnen süre dolunca cache’i siler
  • SlidingExpiration: Cache’in ömrünü belirlemek için kullanılır. Belirlenen süre içinde cache ile ilgli işlem yapılırsa cache’e verilen süre kadar kendini yeniler.
  • PostEvictionCallbacks: Cache neden düşmüş bunun kaydını alabilmek için kullanılır.



Örneğimizde Sql Server veritabanında bulunan ürünler listeimizi çekeceğiz. Çektiğimiz listeyi View’a gönderecek listeleme işlemi gerçekleştireceğiz. Her istekte veritabanına gidip verileri tekrar çekmek yerine cache mekanizmamızı kurup daha önce liste çekilmiş ve cache’e atılmış ise veriyi oradan tüketeceğiz.Liste çekilmemiş ve cache’e atılmamış ise veritabanına bağlanıp listeyip çekip cache’e attıktan sonra View’a göndereceğiz.

Asp.Net Core Mvc Database Connection Startup Config

Uygulamamızı oluşturduktan sonra startup dosyasına gelip ConfigureServices içersine AddMemoryCache(); methodu ile servisimizi ekliyoruz.

Products

Controller

View

“Index();” IMemoryCache interface’ini dependency injection yöntemi ile dışarıdan inject ediyoruz. İnject edilen nesne üzerinden GET(); methodunu çağırıp paramtere olarak key geçiyoruz ve verinin olup olmadını kontrol ediyoruz.Veri daha önce çekilip cache’e alınmışsa GET(); methodunu tekrar çağırıp veriyi alıyoruz ve listeye atıyoruz. Cache boşsa listemiz çekiyoruz. MemoryCacheEntryOptions sınıfından bir nesne yaratıp AbsoluteExpiration ve Priority değerlerini set ediyoruz.

Son olarak SET(); methodunu çağırıp key,value,options paramterelerini geçiyoruz ve ilgili datayı cache’e alma işlemini tamamlıyoruz.

“Create();”methodu ile yeni bir ürün ekleme işlemi yapıyoruz. Yeni ürünün eklenmesi ile listenin güncel halinin alınabilmesi için Remove(); methodu ile parametre olarak geçtiğimiz key‘e ait olan cache verisini temizliyoruz.

Bu makalede Asp.Net Core Mvc’de Memory Cache yapısını incelemeye çalıştık. Umarım faydalı bir yazı olmuştur. Bir başka makalede görüşmek üzere Hoşçakalın 🙂

Source


https://github.com/eaktassssss/AspNetCoreMvcMemoryCache

BUNLAR DA HOŞUNUZA GİDEBİLİR...

CEVAPLAR

  1. Aziz dedi ki:

    Elinize sağlık.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir