Caching (Önbelleğe Alma)

Eyl 06, 2013

Caching (Önbelleğe Alma), ASP.NET sitelerinde performansı artırmak için kullanılan en önemli yapılardan biridir. Web sayfalarında çok sık erişilen bir verinin, bir dosya veya veritabanından her seferinde alınması yerine bunu hafızada tutarak daha hızlı bir şekilde kullanıcılara gösterilmesini sağlar.

ASP.NET teknolojisinde önbelleğe alma teknikleri iki ana başlık altında toplanmaktadır. Bunlar:

  1. Output Caching (Çıktının Önbelleğe Alınması)
  2. Data Caching (Verinin Önbelleğe Alınması)

Output Caching (Çıktının Önbelleğe Alınması)

Sayfanın son halinin önbellekte belli bir süre içerisinde bir kopyası oluşturulur ve aynı süre içerisinde gelen yeni isteklere bu sayfa gönderilir.

Sayfanın önbelleğe alınabilmesi için Output Cache kodunun kullanımına örnek:

<%@OutputCache Duration="300" Location="Any" VaryByParam="none" %>

Duration özelliği, saniye cinsinden sayfanın önbellekte ne kadar saklanacağını belirtir.
Location özelliği de önbelleğin nerede saklanacağını belirten bir enum sunar.

Output Cache'de Location Enum'unun alabileceği değerlere göre önbelleğin saklanacağı yerler:
Any: İsteği yapan alıcı, Proxy Server ya da isteğin yapıldığı server üzerinde.
Client: İsteği yapan alıcı üzerinde.
DownStream: İsteği yapan alıcı ve Proxy Server üzerinde.
None: Önbellekleme yapılmaz.
Server: İsteğin yapıldığı server üzerinde.
ServerandClient: İsteği yapan alıcı ya da isteğin yapıldığı server üzerinde.

Sayfaya ilk istek geldiğinde o anki tarih ve saat bilgisi ekrana gelir.Bundan sonra yapılan isteklerde 300 saniye boyunca eski tarih ve saat ekranda gösterilir.

  • Fragment Caching (Belli bir kısmın Önbelleğe Alınması)
    Belirli bir kısmında anlık güncelleştirmeler yapılan sayfanın sabit kalan bölümlerinin önbelleğe alınması için kullanılır.
  • Substitution Caching (Önbelleğe Alınan Alanın Dinamik Hale Getirilmesi)
    Bazı durumlarda önbelleğe alınan bir sayfanın belli bir kısmının dinamik hale getirilmesi gerekir. Bunu yapabilmek için Substation Caching'i kullanılır.
  • Data Caching (Verinin Önbelleğe Alınması)

    Sayfa içerisinde kullanılan verilerin önbelleğe alınmasıdır. Output caching ile sayfanın tamamını ya da belli bir kısmını önbelleğe alınabilir. Fakat sayfa içerisindeki veri ya da veriler önbelleğe alınmak istendiğinde Data Caching kullanılır.

    Bir nesneyi önbelleğe almak için:
    Cache.Insert("Key", Data)
    Önbelleğe aldığımız nesneyi silmek için :
    Cache.Remove("Key”)
    komutları kullanılır. 

    Data Caching (Verinin Önbelleğe Alınması) yönteminde kullanılan üç yöntem vardır.

  • Absolute Time: Veri belirli bir süre önbellekte saklanır ve bu süre içerisinde gelen istekler önbellekten karşılanır. Sürenin sonunda veri önbellekten silinir.

    Cache.Insert("key", data, null, DateTime.Now.AddMinutes(1), System.Web.Caching.Cache.NoSlidingExpiration)

    İlk parametrede önbelleğe alınan veriye erişebilmek için kullanılan anahtar, ikinci parametrede önbellekte saklanacak olan veri, üçüncü parametrede CacheDependency nesnesi, dördüncü parametrede verinin ne kadar süre önbellekte kalacağını belirten DataTime tipinde bir değer, son parametrede TimeSpantipinde bir değer istenir, Absolute Time için, parametre olarak Cache sınıfında bulunan NoSlidingExpiration alanı kullanılır.

  • Sliding Time (Süreye Bağlı Önbelleğe Alma): Veri belirli bir süre önbellekte saklanır. Eğer bu süre içerisinde yeni istek gelirse süre baştan başlar. Sürenin sonunda veri önbellekten silinir.

    Cache.Insert("key",Data,null,
    System.Web.Caching.Cache.NoAbsoluteExpiration.TimeSpan.FromSeconds(120))

    İlk üç parametre AbsoluteTime'daki ile aynı, dördüncü parametrede Cache sınıfında bulunan NoAbsoluteExpiration alanı son parametrede timespan tipinde bir değer kullanılır.

  • File Dependency (Dosya Değişimine Göre Önbelleğe Alma): Disk üzerinde yer alan bir dosyadaki veri belirli bir süre önbellekte saklanır ancak, dosyada herhangi bir değişiklik olursa önbelleklenen veri silinir.