23 Mart 2008

Session ve Cache Nesneleri Üzerine

Bir web uygulamasında Session ve Cache nesnesi arasında tercih yapacağını ve bu tercihini neye göre belirleyeceğini merak eden bir okuruma yazdığım cevap üzerine blogumda da bu iki nesne üzerine birşeyler yazmaya karar verdim. Zira geçtiğimiz günlerde yazgelistir.com'un forumunda da buna benzer bir başlık görmüştüm. Aslında karşılaştırma yapmaktan ziyade bazı programcı arkadaşların bu iki nesneyi yanlış tanıdıkları için bu yanlış anlaşılmayı biraz olsun düzeltmek niyetindeyim.

Session ve Cache kullanım amaçları bakımından birbirinden tamamen farklı nesnelerdir dersem yanlış olmaz. Zira Session tarayıcıya bağımlı olarak bir kullanıcı ile ilgili bilgiler saklayabileceğimiz bir nesne iken, Cache tüm kullanıcıların erişebileceği ve uygulamada performans kazancı sağlamak için kullanabileceğimiz bir nesnedir. Session nesnesindeki tek amaç belirli bir süreliğine bir değeri veya nesneyi saklamaktır ve performans adına herhangi bir getirisi olmayacaktır. Cache'deki en temel amaç ise performanstır. Dilerseniz şöyle madde madde bir bakalım Session ve Cache arasındaki farklılıklara:

Session
- Kullanıcı ile ilişkili verileri saklar. Her kullanıcının bilgisi bellekte farklı bir alanda saklanır. O an sitede 20 kullanıcı var ise 20 tane farklı Session nesnesi bellekte saklanır. Bir kullanıcı sitedeki diğer kullanıcının Session bilgisine ulaşamaz.
- Genellikle kullanıcı adı veya açılan oturum ile ilgili bilgiler saklanır. Bu bilgiler her kullanıcı için saklanacağı için büyük boyutta olmaması gerekir.
- Bilgiler varsayılan olarak sunucunun belleğinde (InProc modu) saklanır. Eğer istenilirse SQL Server veritabanında (SQLServer modu) veya başka bir sunucunun belleğinde (StateServer modu) saklanabilir.
- Varsayılan olarak Session nesnelerinin yaşam süreleri 20 dakikadır. Kullanıcı sistemden çıkış yapar ise veya 20 dakika boyunca aktif olmazsa Session nesneleri bellekten kaldırılır. Eğer istenilirse bu süre değiştirilebilir. (web.config dosyasında sessionState düğümünden)
- Performans açısından herhangi bir kazanç sağlamaz. Fakat durum yönetimi adına kullanıcıyı tanımamız ve buna göre işlemler yapmamız adına kolaylıklar sağlar.

Cache
- Kullanıcıya özel bilgi saklamaz. Saklanan veriye aynı anda tüm kullanıcılar erişebilir. Sitede 20 kullanıcı var ise 20 tane Cache nesnesi değil 1 tane Cache nesnesi saklanır. (En sık karıştırılan noktalardan biri burası)
- Genellikle bir sayfanın tamamının HTML kodları (output caching), bir sayfanın belirli bir kısmının HTML kodları (fragment caching) veya DataTable gibi bir nesne (data caching) Cache nesnesinde saklanır.
- Bilgiler sunucunun belleğinde saklanır. Bu veriler ASP.NET tarafından yönetilir. Hatta Cache'e eklenecek nesnelere öncelik ataması yapılarak gerektiğinde ASP.NET'in hangi Cache nesnelerini öncelikli olarak bellekten kaldıracağı belirlenebilir.
- Zamana bağımlı olarak veriler Cache'de saklanabileceği gibi nesnenin değişim durumunda göre veya dosya-klasör içeriğinin değişimine bağımlı olarakta değerler saklanabilir.
- Performans kazancı sağlamak amacıyla kullanılır. Bir nesneyi veya bir sayfayı tekrar tekrar üretmek sunucuya belirli bir yük getiriyorsa nesne veya sayfa bellekte saklanarak sayfaların daha hızlı çalıştırılması sağlanır.

Görüldüğü gibi Session ve Cache farklı amaçlar için kullanabileceğimiz nesnelerdir. Session yerine Cache, Cache yerine Session kullanmak teoride olabilse de pratikte kullanılmaz, en azından benim aklıma kullanılabileceği bir yer gelmiyor.

Hiç yorum yok: