C#, ASP.NET için Data Cache


January 2021 (0) Iptv 5/10/2024


Her ne kadar seçmiş olduğum başlık ASP.NET içersede bu yapıyı WPF, WinForms, WindowsServices, ASP.NET MVC gibi .NET ‘in hakim olduğu heryerde kullanabileceğinizi öncelikle belirtmek isterim.

İnternet sitelerimizi OutputCache ile önbelleğe aldık ancak sık sık veritabanından aynı veriyi çekmek veya IO işlemleri gerçekleştirmek ciddi performans problemlerine sebep oluyor.

Bunu aşmak için verileri önbelleğe almak oldukça geçerli bir çözümdür.

.NET kütüphanesindeki ObjectCache sınıfı bu işin biçilmiş kaftandır.

Bu yazımda sizlere ObjectCache sınıfını kullanarak veriönbellekme işlemi gerçekleştirmek için kullanışlı bir yol sunmak istiyorum.


public interface ICacheProvider { object Get(string key); void Set(string key, object data, int cacheTime); bool IsSet(string key); void Invalidate(string key); }

Önbelleğe yazma, okuma, kontrol etme ve silme için metotları tanımlayan bir arayüz oluşturduk. Geriye bu metotları miras alan bir DataCacheProvider sınıfı yazmak kaldı.

public class DataCacheProvider : ICacheProvider { private ObjectCache Cache { get { return MemoryCache.Default; } } /// /// Önbelleğe aldığımız veri okumak için gereken metod. /// ///Veri çekmek için kullanacağımız anahtar /// Önbelleğe alınmış veri public object Get(string key) { return Cache[key]; } /// /// Önbelleğe veri yazmak için kullanacağımız metod /// ///Daha sonra önbellekten veriyi okumak kullanılacak anahtar. ///Önbelleğe yazılacak veri ///Dakika cinsinden bellekte veriyi ne kadar tutuyoruz public void Set(string key, object data, int cacheTime) { CacheItemPolicy policy = new CacheItemPolicy(); policy.AbsoluteExpiration = DateTime.Now + TimeSpan.FromMinutes(cacheTime); Cache.Add(new CacheItem(key, data), policy); } /// /// Belirtilen anahtarda önbelleğe alınmış veri var mı? /// ///Anahtar değerimiz /// public bool IsSet(string key) { return (Cache[key] != null); } /// /// Önbelleğe alınmış veriyi silmek için kullanılan metod. /// ///Anahtar değerimiz public void Invalidate(string key) { Cache.Remove(key); } }

Elimizde istediğimiz veriyi okuyup yazabileceğimiz bir önbellek sağlayımız olduğuna göre LinqToSql ile kullanabileceğimiz bir Repository olsa fena olmazdı.

public class CachedModelsRepository { protected Entities DataContext { get; private set; } public ICacheProvider Cache { get; set; } public CachedModelsRepository() :this(new DataCacheProvider()) { } public CachedModelsRepository(ICacheProvider cacheProvider) { this.DataContext = new Entities(); //EntityFramework this.Cache = cacheProvider; } public List Currencies() { List currencyData = Cache.Get("Currencies") as List; if(currencyData == null) { currencyData = DataContext.Currencies.OrderBy(c=>c.CurrencyCode).ToList(); if(currencyData.Any()) { Cache.Set("Currencies", currencyData, 30); } } return currencyData; } }

Veritabanımızda Currency denen tabloyu önbelleğe aldık. Currency() metodu List tipinde bir sonuç döndürüyor. İlk defa sorgu yaptığınızda 30 dakikalığına önbelleğe alıyor. Sonraki 30 dakika boyunca veritabanına sorgu yapmadan doğrudan önbellekten okuyoruz. Bu da bize müthiş bir performans avantajı veriyor.

ICachedModelRepository Repository = new CachedModelsRepository(); Repository.Currencies().Where(x => x.CurrencyCode==_inputCurrencyCode).Select(x => x.CurrencyName).First();

Şeklinde bir kodlamayla önbelleğe alınmış veriler arasında sorgulama yapabilirsiniz.


Yorum yapabilmek için giriş yapınız

Giriş Yap

Sitede Ara

En Çok Okunanlar

Android Cihazlara POP3 E-Posta Hesabı Kurulumu (1761)
Windows simgelerinde beyaz ikon sorunu ve çözümü (1332)
SQL REPLACE() Kullanımı (884)
Yerel Ağ Bağlantısına girmek istediğimde ''Bağlantı özelliklerine erişmek için yeterli yetkiniz yok.Yöneticinize başvurun'' uyarısı.. (487)
Access violation at address 0518fde4 inmodule NETINFO.dll Read of adress 00000000 (393)
CMD komutları ile Windows Aktivasyonu (367)
PatchCleaner v1.4.2.0 indir Windows Installer Temizleme Programı (357)
MailEnable Webmail Unknown or Disabled User Hatası (349)
Server communication failure. Please refresh your browser and try again. (339)
Bedava Netflix Hesapları 2022 (Ücretsiz Premium Hesaplar) (332)
There is already an object named in the database Cozum (326)
Turbobit Premium Hesaplar Bedava Güncel Üyelikler 2022 (315)
Turbobit Premium Hesaplar Güncel Liste 2022 (313)
Windows 10 Gereksiz Servislerin Kapatılması - Resimli Anlatım (295)
Yazıcı hata kodu 0x0000011b sorun ve cozumu (274)
Windows Bileşen Deposu (WinSxS) Klasörünü Temizleme (270)
ASP.NET MVC Email Doğrulama Sayfası (Verification) (233)
Adobe After Effects CC 2019 Full İndir – v16.1.1.4 (232)
Linq ile inner Join Kullanımı (229)
Dinozor Nesline Son Veren Silen Asteroit Felaketi, Nasıl Gerçekleşti? (220)
3 Adımda Server olay loglarının silinmesi (199)
Windows 10 durdurulabilecek hizmetler (181)
Visual Studio 2017 Dil Ekleme/Değiştirme (175)
Bedava Turbobit Premium Hesap 2022 (%100 Güncel Hesaplar) (165)
Mailenable IP Adresi Nasıl Banlama / How to ip ban block on Mailenable? (154)

Son Yorumlar