SEO (Arama Motoru Optimizasyonu) Mikro İnteraktif ÜCRETSİZ - Google Play'den İndirin

Asp.Net Core In-Memory Cache Kullanımı

Bu makalemizde .Net Core ile yapmış olduğumuz projelere biraz da olsa hız kazandıracak cache (bellekleme) yöntemini anlatmaya çalışacağız.

Projemize ait yapının ekran görüntüsünü paylaşalım.
Proje Yapısı
Asp.Net Core In-Memory Cache Kullanımı

Makalemizi şu örnek üzerinden ilerleteceğiz. Kisiler adlı bir class oluşturup bu classı bir liste şeklinde dolduracağız sonrasında bu listeyi cacheleme yapmaya çalışacağız.
Kisiler
public class Kisiler
{
   public int kisi_ID { get; set; }
   public string? kisi_adi { get; set; }
   public DateTime? olusturulma_tarihi { get; set; }
}

In-memory Cache özelliği Asp.Net Core içerisinde bir servis olarak bulunmaktadır. Bu servis varsayılan olarak kapalı gelmektedir. Bu özelliği açmak için Startup.cs içerisinde bulunan ConfigureServices metodunda aşağıdaki gibi cache servisini açmamız gerekmektedir (.Net 5 ve öncesi için).

Öncelikle boş bir .Net Core MVC projesi oluşturalım. Oluşturulan web projesinde oluşan Program.cs içerisinde servisi aktif etmek için aşağıdaki kod satırını ekliyoruz (.Net 6 ve sonrası için).
Program.cs In-memory Cache Aktif Edelim
builder.Services.AddMemoryCache();

Sonrasında ise oluşturmuş olduğumuz Controller'ın Constructor (Yapıcı Metodu) kısmında injection yaparak Controller yüklenmeden önce In-memory Cache çalışmasını sağlayalım.
Controller Constructor Injection İşlemleri
public class IndexController : Controller
{
   string strKisiler_Cache_Anahtar = "kisiler_key";
   private readonly IMemoryCache mcHafiza;
   public IndexController(IMemoryCache _mcHafiza)
   {
      mcHafiza = _mcHafiza;
   }
}

Başlangıç hazırlıkları yapıldı. Şimdi ise "In-Memory Cache Oluştur", "In-Memory Cache Listele" ve "In-Memory Cache Sil" adlı IActionResult oluşturalım. Böylece her bir IActionResult çağırıldığında In-Memory Cache üzerinde temel işlemleri hazırlamış olacağız.

In-Memory Cache Oluştur
public IActionResult InMemoryCacheOlustur()
{
   string strSonuc = string.Empty;
   List<Kisiler>? liste = null;
   bool blnKontrol = mcHafiza.TryGetValue(strKisiler_Cache_Anahtar, out liste);
   if (!blnKontrol)
   {
      liste = new List<Kisiler>();
      for (int i = 1; i < 200; i++)
      {
         liste.Add(new Kisiler() { kisi_ID = i, kisi_adi = $"İsim {i}" });
      }

      liste[0].olusturulma_tarihi = DateTime.Now;

      MemoryCacheEntryOptions mceoAyarlar = new MemoryCacheEntryOptions
      {
         AbsoluteExpiration = DateTime.Now.AddMinutes(10),
         Priority = CacheItemPriority.Normal
      };
      mcHafiza.Set(strKisiler_Cache_Anahtar, liste, mceoAyarlar);

      strSonuc = "Cache içerisinde veri yoktu, cache oluşturuldu";
   }
   else
   {
      object? objListe_Kisiler = mcHafiza.Get(strKisiler_Cache_Anahtar);
      if (objListe_Kisiler != null)
      {
         liste = (List<Kisiler>)objListe_Kisiler;
         strSonuc = $"Cache içerisinde veri mevcut, veriler cache üzerinden okunarak alındı.";
         strSonuc += $"<br />Bellekten okunan kişi sayısı: {liste.Count}";
         strSonuc += $"<br />Bellek oluşturulma tarihi: {liste[0].olusturulma_tarihi}";
         strSonuc += $"<br />Şuanki tarih: {DateTime.Now}";
      }
   }
   return View("~/Views/InMemoryCacheOlustur.cshtml", strSonuc);
}

MemoryCacheEntryOptions kısmında cache için ayarlar yapılırken AbsoluteExpiration = DateTime.Now.AddMinutes(10) nitelendirmesi ile belleğin 10 dakika geçerli olacağını deklere etmiş olduk. Siz ihtiyaç duyduğunuz süreyi arttırabilir veya azaltabilirsiniz.
Belleğe verileri yazacak olan metodu oluşturduk. Belleğin oluşturulma durumunun sonucunu veren view hazırlayalım. Çünkü InMemoryCacheOlustur metodu çalıştırıldığında kendisine ait view üzerinde cache bilgilerini bize göstermektedir. InMemoryCacheOlustur.cshtml Sayfası
@model string;

@if (Model != null)
{
   @Html.Raw(Model.ToString());
}

Bellekteki verileri listeleyecek olan metodu hazırlayalım.
In-Memory Cache Listele
public IActionResult InMemoryCacheListele()
{
   List<Kisiler>? liste = new List<Kisiler>();
   object? objListe_Kisiler = mcHafiza.Get(strKisiler_Cache_Anahtar);
   if (objListe_Kisiler != null)
   {
      liste = (List<Kisiler>)objListe_Kisiler;
   }
   return View("~/Views/InMemoryCacheListele.cshtml", liste);
}

Bellekteki verileri listeleyen metodu oluşturduk. Bu verileri bir view üzerine aktarıp görüntüleyelim. InMemoryCacheListele.cshtml Sayfası
@model List<Kisiler>
@using ProjeInMemory.Classes;

@if (Model != null && Model.Count > 0)
{
    <ul class="kisiler">
    @foreach (var item in Model)
    {
        <li>@item.kisi_adi</li>
    }
    </ul>
}

Bellekteki verileri silecek olan metodu hazırlayalım.
In-Memory Cache Sil
public IActionResult InMemoryCacheSil()
{
   string strSonuc = "Cacheleme yapılmadığı için In-memory Cache silinmedi";
   object? objListe_Kisiler = mcHafiza.Get(strKisiler_Cache_Anahtar);
   if (objListe_Kisiler != null)
   {
      mcHafiza.Remove(strKisiler_Cache_Anahtar);
      strSonuc = "In-memory Cache silindi";
   }
   return View("~/Views/InMemoryCacheSil.cshtml", strSonuc);
}

Bellekteki verileri silen metodu oluşturduk. Bu verilerin silindiği yada silinmediği sonucunu bir view üzerine aktarıp görüntüleyelim. InMemoryCacheSil.cshtml Sayfası
@model string;

@if (Model != null)
{
   @Html.Raw(Model.ToString());
}

Kısa kısa projeyi sizlere aktarmaya çalıştık. Kendi çalışma alanımdan makalenin çalışır halinin ekran kaydını aşağıya bırakıyorum. Ayrıca yapılan projenin çalışır hali de ekte yer almaktadır.
Örnek
Asp.Net Core In-Memory Cache Kullanımı

Yorumlar

Yorum Yaz

Avatar

REKLAM

DDos Koruma, Botnet Koruma, Layer 7 Saldırı koruması, Sanal sunucu, Vds sunucu

REKLAM

Çizgi Filmler

REKLAM

Çocuk Etkinlikleri Uygulaması

EN

  • Popüler
  • Yeni
  • Son Yorum