ASP.NET Core MVC State Management Bölüm-5
  1. Anasayfa
  2. ASP.Net

ASP.NET Core MVC State Management Bölüm-5

0

Bir önceki yazımın devamı olan bu bölüm içerisinde, sizlere Cache nedir ve kullanımı hakkında bilgiler veriyor olacağım.Önbellekleme, verileri depolamanın en kolay ve etkili yoludur. Uygulamada önbelleğe(Cache) alınan verilerin ömrünü kontrol edebilir ve belirli koşullarda yenilenmesini sağlayabilirsiniz.Önbellekleme yani Caching, nadiren değişen ve oluşturulması pahalı yani uzun süren işlemler gibi durumlarda daha hızlı sonuç alma ve az kaynak kullanarak işleme devam etmek için kullandığımız yöntemdir.

Not : Uygulamalarınızı kesinlikle, önbelleğe alınmış verilere bağlı olmayacak şekilde tasarlamanız ve uygulamayı mutlaka test etmeniz gerekir.

Bu bölüm içerisinde Cache mekanizmasını farklı bölümler olarak inceleyeceğiz bunlar;

  • Cache in-memory
  • Distributed caching
  • Response Caching
  • ObjectPool

İlk bölüm olarak, MemoryCache bölümüne bakıyor olacağız.

MemoryCache, sunucu(nun) belleklerinde belirli bir süre için, veri saklama işlemidir. Verileri bellek üzerinde saklarken belirli kurallar belirtiriz. Bu değerler sayesinde ilgili veri bellek üzerinde ne kadar duracak, hangi anahtar kelime ile saklanacak gibi belirli değerler vererek verileri tutma işlemi gerkeçleştirilir.

Cache ayarlarını yaparken kullanabileceğimiz seçenekler aşşağıdaki gibidir.

  • public : Yanıt, önbelleğe alınabileceğini gösterir
  • private : Yanıt, paylaşılan bir önbellek tarafından saklanmamalıdır. Özel bir önbellek yanıtı depolayabilir ve yeniden kullanabilir.
  • max-age : İstemci, yaşı belirtilen saniyeden fazla olan bir yanıtı kabul etmez. Örnekler: max-age=120 (120 saniye), max-age=2592000(1 ay)
  • no-cache : Kaynak sunucu istemci için yanıtı yeniden oluşturur ve ara katman yazılımı önbelleğinde depolanan yanıtı güncelleştirir.
  • no-store : Önbellek isteği depolamamalıdır.

Örnek uygulama için aşağıda yer alan komutları gerçekleştiriniz ve projeyi oluşturunuz.

Projenizi visualstudio kullanarak açabilirsiniz. Makale boyunca tüm örnekleri CLI kullanarak visualstudio üzerinden anlatıyor olacağım..

Öncelikle yeni bir command prompt (mac kullananlar için terminal) açınız.

Sırası ile komutlarımız,

  1. cd Desktop => ilgili dizinimizi masaüstü olarak ayarlıyalım.
  2. mkdir StateManagement => StatManagement adında bir klasör oluşturalım
  3. cd StateManagement => dizin olarak, oluşturduğumuz klasörü belirleyelim
  4. dotnet new mvc -n MemoryCacheApp -f netcoreapp3.1 => dotnet cli komutlarını kullanarak 3.1 versiyonu ile yeni bir mvc projesi oluşturuyoruz.
  5. cd MemoryCacheApp => dizinimizi proje ana dizini olarak belirliyoruz.
  6. code . => code(boşluk).(nokta) diyerek vscode’u proje dizininde açıyoruz.

Projemizi açtıktan sonra, ana dizin içerisinde yer alan Startup.cs class’ını açıp ConfigurationServices metodunu aşşağıdaki gibi düzenleyelim.

 public void ConfigureServices(IServiceCollection services)


    {


        services.AddMemoryCache(); // bu alanı eklemeniz yeterlidir.


    services.AddControllersWithViews();


    }

Yukarıdaki işlemi bitirdikten sonra, HomeController içerisine gelelim ve global alanda sabit kullanacağımız anahtar değerlerimizi oluşturup, IMemoryCache nesnemizi inject edelim.

HomeController içerisini aşşağıdaki gibi düzenleyiniz.

    public class HomeController : Controller


    {


        private const string CACHE_KEY_DATE = "_date";


        private IMemoryCache _cache;


        public HomeController(IMemoryCache cache)


        {


            this._cache = cache;


        }


    }

Yukarıda cache işlemi süresince kullanacağımız sadece okunabilir static bir değişken tanımladık ve içerisine anahtar kelimemizi ekledik. Cache kullanabilmek için, Constructor içerisinde inject ederek Controller içerisine dahil ettik. Şimdi ilk örnek için geriye JsonResult dönen bir action ekleyelim.

   public JsonResult GetDate()


    {


        if (!_cache.TryGetValue(CACHE_KEY_DATE, out DateTime _date))


        {


            _date = DateTime.Now;


            _cache.Set(CACHE_KEY_DATE, _date);


        }


        return Json(new { _date = _date, __now = DateTime.Now });


    }

Controller içerisindeki Action’I yukarıdaki gibi düzenledikten sonra, CommandPrompt’a gelerek ana dizin içerisinde dotnet watch run komutunu çalıştırıp uygulamamızı ayağa kaldıralım.

Browser’a gelerek http://localhost:5000/home/getdate url’e gelerek ekran çıktısınız görelim. Yukarıdaki işlemde Cache’in ne kadar yaşayacağını belirtmedik uygulama çalıştığı sürece cache devam edecektir. Eğer Cache’in bir ömrü olacaksa Option belirtmemiz gerekmektedir.

Tanımladığımız Cache’in hangi durumlarda nasıl bozulacağını veya ne kadar yaşayacağını belirlemek için 2 farklı yöntem kullanıyoruz

  1. SetAbsoluteExpiration, Kesinlik belirtir. Verilen süre içerisinde cache bozulup gelen bir sonraki istekte yeniden cache devreye girecektir.
  • SetSlidingExpiration, Kullanıcı verilen süre boyunca istekte bulunmazsa, cache otomatik yenilenir. Süre zarfı boyunca kullanıcı istekte bulunmaya devam ederse, her istekte zaman yenilenir (öteleme işlemi uygular) ve datalar cache’den gelmeye devam eder.

 

Yukarıda belirttiğimiz 2 başlığı daha detaylı incelemek için örneklendirelim. İlk olarak, SetAbsoluteExpiration durumunu inceliyor olalım. AbsoluteExpiration belirlenen zamana kadar kullanıcıya aynı veriyi teslim eder. Kullanıcıların ne sıklıkla istekte bulunduklarının bir önemi yoktur. Bu kullanım şeklinde dikkat etmemiz gereken kesin zaman dilimi kullanmamak. Bunun yerine TimeSpan nesnesinden faydalanarak süre belirtmek en sağlıklı çalışma şekli olacaktır.

   public JsonResult SetAbsoluteExpiration()


        {


            if (!_cache.TryGetValue(CACHE_KEY_DATE, out DateTime _date))


            {


                _date = DateTime.Now;


                var option = new MemoryCacheEntryOptions()


                    .SetAbsoluteExpiration(TimeSpan.FromSeconds(50));


                    // kullanıcı, ne kadar sıklıkla istekte bulunsada, verilen süre boyunca cache bozulmayacktır.


// Cache zamanı belirtirken kesinlik kullanmamak önemlidir.


// Eğer kesin tarih belirtrseniz, o tarih bir daha oluşmayacağından cache bir daha çalışmayacaktır.


// Eğer kesin zaman dilimi kullanmanızı gerektirecek bir durum var ise, dinamik olarak ayarlayınız her yılın bu tarihinde cache yenilensin gibi.


// Yıl bilgisini değişken olarak verip her yılın aynı ay ve gününde cache yenileyebilirsiniz.


                _cache.Set(CACHE_KEY_DATE, _date, option);


            }


            return Json(new { _date = _date, __now = DateTime.Now });


        }

Controller içerisindeki Action’I yukarıdaki gibi düzenledikten sonra, CommandPrompt’a gelerek ana dizin içerisinde dotnet watch run komutunu çalıştırıp uygulamamızı ayağa kaldıralım.

Browser’a gelerek http://localhost:5000/home/setabsoluteexpiration url’e gelerek ekran çıktısınız görelim.

Bu işlemin sonunda bir sonraki örneğimiz olan SetSlidingExpression bölümünü inceleyelim, bu yapıda uygulama ötelemeli çalışmaktadır. Belirtilen süre zarfında eğer bir istekte bulunulmazsa, cache bozulacaktır ve bir sonraki istekte yeniden cache devreye girecektir. Eğer süre zarfından yeni bir istek gelirse süre tekrar başa dönecektir. 

  public JsonResult SetSlidingExpiration()


        {


            if (!_cache.TryGetValue(CACHE_KEY_DATE, out DateTime _date))


            {


                _date = DateTime.Now;


                // Kullanıcı verilen süre boyunca istekte bulunmazsa, cache otomatik yenilenir.


// Süre zarfı boyunca kullanıcı istekte bulunmaya devam ederse, her istekte zaman yenilenir (öteleme işlemi uygular) ve datalar cache'den gelmeye devam eder.


                var option = new MemoryCacheEntryOptions()


                    .SetSlidingExpiration(TimeSpan.FromSeconds(50));


                _cache.Set(CACHE_KEY_DATE, _date, option);


            }


            return Json(new { _date = _date, __now = DateTime.Now });


        }

Controller içerisindeki Action’I yukarıdaki gibi düzenledikten sonra, CommandPrompt’a gelerek ana dizin içerisinde dotnet watch run komutunu çalıştırıp uygulamamızı ayağa kaldıralım.

Browser’a gelerek http://localhost:5000/home/setslidingexpiration url’e gelerek ekran çıktısınız görelim.

Bu makalede sizlere MemoryCache kullanımı ile ilgili temel kullanımı örneklemeye çalıştım bir sonraki yazımda görüşmek üzere.

 

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar        

www.mshowto.org

TAGs:ASP.NET Core,MVC State Management

Bu İçeriğe Tepkin Ne Oldu?
  • 2
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

1982 Ankara doğumluyum, Lise ve Üniversite Eğitimini Açık Öğretim üzerinden tamamladım ve 2009 yılında BilgeAdam ile yazılım hayatına atıldım Öğrenci olarak başladığım kurumda 2009 yılından bu yana farklı görevlerde çalıştım. Şuan Bilgeadam beşiktaş şubesinde aktif olarak danışmanlık ve yazılım eğitmenliği yapmaktayım. Yeni teknolojileri araştırıp öğrenmeyi seven biriyim. İşim gereği hem geliştirdiğim projeler olsun eğitim verdiğim öğrenciler olsun aktif olarak kendimi güncel tutmak işimin gereği ve bu bildiklerimi paylaşmaktan mutluluk duyuyorum.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir